From 208fab2d771835cc027f5f17e8a8f65020260870 Mon Sep 17 00:00:00 2001 From: Richard Finegold Date: Tue, 19 Jun 2018 18:40:52 -0700 Subject: [PATCH 01/29] authors.txt: add missing, rm dupe, minor sorting I didn't reorder the max_\* ones, those were clear enough. --- res/authors.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/res/authors.txt b/res/authors.txt index ee1b346758..90954f272a 100644 --- a/res/authors.txt +++ b/res/authors.txt @@ -68,6 +68,7 @@ quest_icons.svg bench bicycle bicycle_parking + bicycle_parking_capacity bicycle_parking_cover bicycleway bicycleway_width @@ -82,17 +83,18 @@ quest_icons.svg building_levels building_underground bus modified from Twemoji 2: U+1F68D + bus_shelter parts taken from Twemoji 2: U+1F68D bus_stop_name parts taken from Twemoji 2: U+1F68D - housenumber - housenumber_street - bicycleway car modified from Twemoji 2: U+1F698 car_wash modified from Twemoji 2: U+1F698 car_charger parts taken from Twemoji 2: U+1F698 and U+1F50C clock + fee ferry modified from Twemoji 2: U+26F4 - fire_hydrant + fire_hydrant fuel + housenumber + housenumber_street label lantern leaf @@ -105,6 +107,7 @@ quest_icons.svg museum note_create notes + oneway parking parking_access parts taken from EmojiOne 2: U+1F511 parking_fee parts taken from EmojiOne 2: U+1F4B8 @@ -114,11 +117,10 @@ quest_icons.svg pedestrian_segregated phone power + quest restaurant modified from Twemoji 2: U+1F37D restaurant_vegan parts taken from Twemoji 2: U+1F37D and U+1F955 restaurant_vegetarian parts taken from Twemoji 2: U+1F37D and U+1F955 - oneway - quest railway road_construction roof_shape From 2620d8a3f032ad2744d18fb9d897db0a1a74f58f Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Fri, 22 Jun 2018 20:25:36 +0200 Subject: [PATCH 02/29] fix wrong placeholders in Italian --- app/src/main/res/values-it/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1f55849e84..58c8ec837a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -555,9 +555,9 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "È completato questo passaggio pedonale?" "Questa via è completata?" "Questo edificio è completato?" - "Mai mostrato in% s" + "Mai mostrato in %s" "Quest' area di servizio ha un bagno?" - "Qual è il limite di velocità per% s?" + Qual è il limite di velocità per %s? "Che tipo di pavimentazione hanno questi gradini?" "Che tipo di pavimentazione ha questo percorso equestre?" "Che tipo di pavimentazione ha questo sentiero?" From 8a5b850b384dab6d0b46b1384b467240fe1ba76e Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 23 Jun 2018 13:28:40 +0200 Subject: [PATCH 03/29] Show arrows for the oneway quest (#1110) --- .../streetcomplete/ApplicationComponent.java | 2 + .../quests/StreetSideRotater.java | 60 +++++++++++++++++++ .../quests/bikeway/AddCyclewayForm.java | 47 +++------------ .../quests/oneway/AddOnewayForm.java | 40 +++++++++++++ .../streetcomplete/tangram/MapFragment.java | 20 ++----- .../streetcomplete/util/BitmapUtil.java | 48 +++++++++++++++ .../view/StreetSideSelectPuzzle.java | 39 +++--------- app/src/main/res/drawable/ic_oneway_lane.xml | 10 ++++ .../res/drawable/ic_oneway_lane_reverse.xml | 12 ++++ ...leway.xml => quest_street_side_puzzle.xml} | 1 - .../main/res/layout/side_select_puzzle.xml | 6 +- 11 files changed, 196 insertions(+), 89 deletions(-) create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/StreetSideRotater.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/util/BitmapUtil.java create mode 100644 app/src/main/res/drawable/ic_oneway_lane.xml create mode 100644 app/src/main/res/drawable/ic_oneway_lane_reverse.xml rename app/src/main/res/layout/{quest_cycleway.xml => quest_street_side_puzzle.xml} (99%) diff --git a/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java b/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java index b675ff9053..a8585362a0 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java +++ b/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java @@ -12,6 +12,7 @@ import de.westnordost.streetcomplete.oauth.OsmOAuthDialogFragment; import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; import de.westnordost.streetcomplete.quests.QuestModule; +import de.westnordost.streetcomplete.quests.oneway.AddOnewayForm; import de.westnordost.streetcomplete.quests.opening_hours.AddOpeningHoursForm; import de.westnordost.streetcomplete.quests.localized_name.AddRoadNameForm; import de.westnordost.streetcomplete.quests.parking_fee.AddParkingFeeForm; @@ -49,6 +50,7 @@ public interface ApplicationComponent void inject(AddOpeningHoursForm addOpeningHoursForm); void inject(AddRoadNameForm addRoadNameForm); void inject(AddParkingFeeForm parkingFeeForm); + void inject(AddOnewayForm addOnewayForm); void inject(AddCollectionTimesForm addCollectionTimesForm); void inject(OsmOAuthDialogFragment osmOAuthDialogFragment); diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/StreetSideRotater.java b/app/src/main/java/de/westnordost/streetcomplete/quests/StreetSideRotater.java new file mode 100644 index 0000000000..3169cdc2fc --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/StreetSideRotater.java @@ -0,0 +1,60 @@ +package de.westnordost.streetcomplete.quests; + +import android.os.Handler; +import android.os.Looper; +import android.support.annotation.AnyThread; +import android.view.View; + +import java.util.List; + +import de.westnordost.osmapi.map.data.LatLon; +import de.westnordost.streetcomplete.data.osm.ElementGeometry; +import de.westnordost.streetcomplete.util.SphericalEarthMath; +import de.westnordost.streetcomplete.view.StreetSideSelectPuzzle; + +public class StreetSideRotater +{ + private StreetSideSelectPuzzle puzzle; + private View compassView; + private float wayOrientationAtCenter; + + private final Handler uiThread = new Handler(Looper.getMainLooper()); + + public StreetSideRotater(StreetSideSelectPuzzle puzzle, View compassView, ElementGeometry geometry) + { + this.puzzle = puzzle; + this.compassView = compassView; + wayOrientationAtCenter = getWayOrientationAtCenterLineInDegrees(geometry); + } + + @AnyThread public void onMapOrientation(final float rotation, final float tilt) + { + uiThread.post(() -> + { + puzzle.setStreetRotation(wayOrientationAtCenter + toDegrees(rotation)); + compassView.setRotation(toDegrees(rotation)); + compassView.setRotationX(toDegrees(tilt)); + }); + } + + private static float toDegrees(float radians) + { + return (float) (180 * radians / Math.PI); + } + + private static float getWayOrientationAtCenterLineInDegrees(ElementGeometry e) + { + if(e.polylines == null) return 0; + + List points = e.polylines.get(0); + if(points != null && points.size() > 1) + { + List centerLine = SphericalEarthMath.centerLineOf(points); + if(centerLine != null) + { + return (float) SphericalEarthMath.bearing(centerLine.get(0), centerLine.get(1)); + } + } + return 0; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/bikeway/AddCyclewayForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/bikeway/AddCyclewayForm.java index 5ba1cf3468..a80bfc83b7 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/bikeway/AddCyclewayForm.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/bikeway/AddCyclewayForm.java @@ -18,13 +18,11 @@ import java.util.List; import java.util.Map; -import de.westnordost.osmapi.map.data.LatLon; import de.westnordost.streetcomplete.R; -import de.westnordost.streetcomplete.data.osm.ElementGeometry; import de.westnordost.streetcomplete.data.osm.tql.FiltersParser; import de.westnordost.streetcomplete.data.osm.tql.TagFilterExpression; import de.westnordost.streetcomplete.quests.AbstractQuestFormAnswerFragment; -import de.westnordost.streetcomplete.util.SphericalEarthMath; +import de.westnordost.streetcomplete.quests.StreetSideRotater; import de.westnordost.streetcomplete.view.ListAdapter; import de.westnordost.streetcomplete.view.StreetSideSelectPuzzle; import de.westnordost.streetcomplete.view.dialogs.AlertDialogBuilder; @@ -46,9 +44,8 @@ public class AddCyclewayForm extends AbstractQuestFormAnswerFragment " (oneway ~ yes|-1 and highway ~ primary|secondary|tertiary or junction=roundabout)"); - private StreetSideSelectPuzzle puzzle; - private ImageView compassView; - private float wayOrientationAtCenter; + private StreetSideRotater streetSideRotater; + StreetSideSelectPuzzle puzzle; private boolean isDefiningBothSides; @@ -59,14 +56,14 @@ public class AddCyclewayForm extends AbstractQuestFormAnswerFragment Bundle inState) { View view = super.onCreateView(inflater, container, inState); - setContentView(R.layout.quest_cycleway); + setContentView(R.layout.quest_street_side_puzzle); + + View compassNeedle = view.findViewById(R.id.compassNeedle); puzzle = view.findViewById(R.id.puzzle); puzzle.setListener(this::showCyclewaySelectionDialog); - compassView = view.findViewById(R.id.compassNeedle); - - wayOrientationAtCenter = getWayOrientationAtCenterLineInDegrees(getElementGeometry()); + streetSideRotater = new StreetSideRotater(puzzle, compassNeedle, getElementGeometry()); initPuzzleDisplay(inState); initPuzzleImages(inState); @@ -139,35 +136,9 @@ private void initPuzzleImages(Bundle inState) @AnyThread public void onMapOrientation(final float rotation, final float tilt) { - final float rotationInDegrees = (float) (rotation * 180 / Math.PI); - getActivity().runOnUiThread(() -> - { - if(puzzle != null) - { - puzzle.setStreetRotation(wayOrientationAtCenter + rotationInDegrees); - } - if(compassView != null) - { - compassView.setRotation((float) (180*rotation/Math.PI)); - compassView.setRotationX((float) (180*tilt/Math.PI)); - } - }); - } - - private static float getWayOrientationAtCenterLineInDegrees(ElementGeometry e) - { - if(e.polylines == null) return 0; - - List points = e.polylines.get(0); - if(points != null && points.size() > 1) - { - List centerLine = SphericalEarthMath.centerLineOf(points); - if(centerLine != null) - { - return (float) SphericalEarthMath.bearing(centerLine.get(0), centerLine.get(1)); - } + if(streetSideRotater != null) { + streetSideRotater.onMapOrientation(rotation, tilt); } - return 0; } @Override protected void onClickOk() diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOnewayForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOnewayForm.java index 53dd8a5661..cba4cf0425 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOnewayForm.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOnewayForm.java @@ -1,13 +1,46 @@ package de.westnordost.streetcomplete.quests.oneway; import android.os.Bundle; +import android.support.annotation.AnyThread; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import javax.inject.Inject; + +import de.westnordost.streetcomplete.Injector; +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.quests.StreetSideRotater; import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; +import de.westnordost.streetcomplete.view.StreetSideSelectPuzzle; public class AddOnewayForm extends YesNoQuestAnswerFragment { public static final String WAY_ID = "way_id"; + @Inject WayTrafficFlowDao db; + private StreetSideRotater streetSideRotater; + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle inState) + { + Injector.instance.getApplicationComponent().inject(this); + + View view = super.onCreateView(inflater, container, inState); + setContentView(R.layout.quest_street_side_puzzle); + + View compassNeedle = view.findViewById(R.id.compassNeedle); + StreetSideSelectPuzzle puzzle = view.findViewById(R.id.puzzle); + puzzle.showOnlyRightSide(); + + boolean isForward = db.isForward(getOsmElement().getId()); + puzzle.setRightSideImageResource(isForward ? R.drawable.ic_oneway_lane : R.drawable.ic_oneway_lane_reverse); + + streetSideRotater = new StreetSideRotater(puzzle, compassNeedle, getElementGeometry()); + + return view; + } + @Override protected void onClickYesNo(boolean answer) { Bundle bundle = new Bundle(); @@ -16,4 +49,11 @@ public class AddOnewayForm extends YesNoQuestAnswerFragment bundle.putLong(WAY_ID, getOsmElement().getId()); applyImmediateAnswer(bundle); } + + @AnyThread public void onMapOrientation(float rotation, float tilt) + { + if(streetSideRotater != null) { + streetSideRotater.onMapOrientation(rotation, tilt); + } + } } diff --git a/app/src/main/java/de/westnordost/streetcomplete/tangram/MapFragment.java b/app/src/main/java/de/westnordost/streetcomplete/tangram/MapFragment.java index fdd63e5bfc..247d08d40f 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/tangram/MapFragment.java +++ b/app/src/main/java/de/westnordost/streetcomplete/tangram/MapFragment.java @@ -3,8 +3,6 @@ import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.PointF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; @@ -46,6 +44,7 @@ import de.westnordost.osmapi.map.data.LatLon; import de.westnordost.streetcomplete.Prefs; import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.util.BitmapUtil; import de.westnordost.streetcomplete.util.SphericalEarthMath; import static android.content.Context.SENSOR_SERVICE; @@ -211,7 +210,7 @@ private void initMarkers() private Marker createLocationMarker(int order) { Marker marker = controller.addMarker(); - BitmapDrawable dot = createBitmapDrawableFrom(R.drawable.location_dot); + BitmapDrawable dot = BitmapUtil.createBitmapDrawableFrom(getResources(), R.drawable.location_dot); marker.setStylingFromString("{ style: 'points', color: 'white', size: ["+TextUtils.join(",",sizeInDp(dot))+"], order: 2000, flat: true, collide: false }"); marker.setDrawable(dot); marker.setDrawOrder(order); @@ -220,7 +219,7 @@ private Marker createLocationMarker(int order) private Marker createDirectionMarker(int order) { - BitmapDrawable directionImg = createBitmapDrawableFrom(R.drawable.location_direction); + BitmapDrawable directionImg = BitmapUtil.createBitmapDrawableFrom(getResources(), R.drawable.location_direction); directionMarkerSize = sizeInDp(directionImg); Marker marker = controller.addMarker(); @@ -232,7 +231,7 @@ private Marker createDirectionMarker(int order) private Marker createAccuracyMarker(int order) { Marker marker = controller.addMarker(); - marker.setDrawable(createBitmapDrawableFrom(R.drawable.accuracy_circle)); + marker.setDrawable(BitmapUtil.createBitmapDrawableFrom(getResources(), R.drawable.accuracy_circle)); marker.setDrawOrder(order); return marker; } @@ -247,17 +246,6 @@ private String[] sizeInDp(Drawable drawable) drawable.getIntrinsicHeight() / d + "px"}; } - private BitmapDrawable createBitmapDrawableFrom(int resId) - { - Drawable drawable = getResources().getDrawable(resId); - Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - return new BitmapDrawable(getResources(), bitmap); - } - private void updateMapTileCacheSize() { httpHandler = createHttpHandler(); diff --git a/app/src/main/java/de/westnordost/streetcomplete/util/BitmapUtil.java b/app/src/main/java/de/westnordost/streetcomplete/util/BitmapUtil.java new file mode 100644 index 0000000000..4bcc468846 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/util/BitmapUtil.java @@ -0,0 +1,48 @@ +package de.westnordost.streetcomplete.util; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.support.annotation.DrawableRes; +import android.support.annotation.IdRes; + +import de.westnordost.streetcomplete.R; + +public class BitmapUtil +{ + public static Bitmap createBitmapFrom(Drawable drawable) + { + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } + + public static BitmapDrawable createBitmapDrawableFrom(Resources res, Drawable drawable) + { + return new BitmapDrawable(res, createBitmapFrom(drawable)); + } + + public static BitmapDrawable createBitmapDrawableFrom(Resources res, @DrawableRes int resId) + { + return createBitmapDrawableFrom(res, res.getDrawable(resId)); + } + + public static BitmapDrawable asBitmapDrawable(Resources res, Drawable drawable) + { + if(drawable instanceof BitmapDrawable) + { + return (BitmapDrawable) drawable; + } + return createBitmapDrawableFrom(res, drawable); + } + + public static BitmapDrawable asBitmapDrawable(Resources res, @DrawableRes int resId) + { + return asBitmapDrawable(res, res.getDrawable(resId)); + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/view/StreetSideSelectPuzzle.java b/app/src/main/java/de/westnordost/streetcomplete/view/StreetSideSelectPuzzle.java index 14719075aa..0987c0293a 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/view/StreetSideSelectPuzzle.java +++ b/app/src/main/java/de/westnordost/streetcomplete/view/StreetSideSelectPuzzle.java @@ -4,11 +4,9 @@ import android.annotation.TargetApi; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.NonNull; @@ -23,6 +21,7 @@ import android.widget.RelativeLayout; import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.util.BitmapUtil; public class StreetSideSelectPuzzle extends FrameLayout { @@ -55,9 +54,8 @@ public StreetSideSelectPuzzle(@NonNull Context context, @Nullable AttributeSet a private View rotateContainer; - private ImageView rightSideImage; - private ImageView leftSideImage; - + private ImageView leftSideImage, rightSideImage; + private View leftSide, rightSide; private View strut; private OnClickSideListener listener; @@ -76,14 +74,11 @@ private void init(Context context) LayoutInflater.from(context).inflate(R.layout.side_select_puzzle, this, true); rotateContainer = findViewById(R.id.rotateContainer); - rightSideImage = findViewById(R.id.rightSideImage); leftSideImage = findViewById(R.id.leftSideImage); - strut = findViewById(R.id.strut); - - findViewById(R.id.leftSide).setOnClickListener(view -> onClick(false)); - findViewById(R.id.rightSide).setOnClickListener(view -> onClick(true)); + leftSide = findViewById(R.id.leftSide); + rightSide = findViewById(R.id.rightSide); addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { @@ -119,6 +114,8 @@ private void onClick(boolean isRight) public void setListener(OnClickSideListener listener) { this.listener = listener; + leftSide.setOnClickListener(view -> onClick(false)); + rightSide.setOnClickListener(view -> onClick(true)); } public void setStreetRotation(float rotation) @@ -190,7 +187,7 @@ private void replaceAnimated(int resId, ImageView imgView, boolean flip180Degree private void setStreetDrawable(int resId, int width, ImageView imageView, boolean flip180Degrees) { - BitmapDrawable drawable = scaleToWidth(asBitmapDrawable(resId), width, flip180Degrees); + BitmapDrawable drawable = scaleToWidth(BitmapUtil.asBitmapDrawable(getResources(), resId), width, flip180Degrees); drawable.setTileModeY(Shader.TileMode.REPEAT); imageView.setImageDrawable(drawable); } @@ -205,24 +202,4 @@ private BitmapDrawable scaleToWidth(BitmapDrawable drawable, int width, boolean drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), m, true); return new BitmapDrawable(getResources(), bitmap); } - - private BitmapDrawable asBitmapDrawable(int resId) - { - Drawable drawable = getResources().getDrawable(resId); - if(drawable instanceof BitmapDrawable) - { - return (BitmapDrawable) drawable; - } - return createBitmapDrawableFrom(drawable); - } - - private BitmapDrawable createBitmapDrawableFrom(Drawable drawable) - { - Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - return new BitmapDrawable(getResources(), bitmap); - } } diff --git a/app/src/main/res/drawable/ic_oneway_lane.xml b/app/src/main/res/drawable/ic_oneway_lane.xml new file mode 100644 index 0000000000..3737bec803 --- /dev/null +++ b/app/src/main/res/drawable/ic_oneway_lane.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_oneway_lane_reverse.xml b/app/src/main/res/drawable/ic_oneway_lane_reverse.xml new file mode 100644 index 0000000000..80e7525f81 --- /dev/null +++ b/app/src/main/res/drawable/ic_oneway_lane_reverse.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app/src/main/res/layout/quest_cycleway.xml b/app/src/main/res/layout/quest_street_side_puzzle.xml similarity index 99% rename from app/src/main/res/layout/quest_cycleway.xml rename to app/src/main/res/layout/quest_street_side_puzzle.xml index ab3b0dc2c2..7cde4d78ab 100644 --- a/app/src/main/res/layout/quest_cycleway.xml +++ b/app/src/main/res/layout/quest_street_side_puzzle.xml @@ -39,5 +39,4 @@ android:layout_below="@+id/compassNorth" /> - diff --git a/app/src/main/res/layout/side_select_puzzle.xml b/app/src/main/res/layout/side_select_puzzle.xml index b76f7a2335..f486d8e4aa 100644 --- a/app/src/main/res/layout/side_select_puzzle.xml +++ b/app/src/main/res/layout/side_select_puzzle.xml @@ -34,7 +34,7 @@ android:layout_alignParentLeft="true" android:scaleType="fitXY" tools:ignore="RtlHardcoded" - tools:src="@drawable/ic_cycleway_sidewalk_ok" + tools:src="@drawable/ic_cycleway_sidewalk" tools:rotation="180"/> @@ -55,10 +55,10 @@ android:layout_alignParentLeft="true" android:scaleType="fitXY" tools:ignore="RtlHardcoded" - tools:src="@drawable/ic_cycleway_sidewalk_ok"/> + tools:src="@drawable/ic_cycleway_sidewalk"/> - \ No newline at end of file + From 11ade6ebf42aa162ecb9ab66088222a473c24e95 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 23 Jun 2018 13:29:12 +0200 Subject: [PATCH 04/29] fix traffic flow direction logic for the oneway quest (#1110) --- .../oneway/TrafficFlowSegmentsDaoTest.java | 24 +++++++---- .../data/StreetCompleteOpenHelper.java | 11 ++++- .../quests/oneway/AddOneway.java | 41 +++++++++++++++---- .../quests/oneway/TrafficFlowSegment.java | 19 +++++---- .../quests/oneway/TrafficFlowSegmentsDao.java | 13 ++++-- .../oneway/WayTrafficFlowTablesHelper.java | 5 +++ 6 files changed, 85 insertions(+), 28 deletions(-) diff --git a/app/src/androidTest/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDaoTest.java b/app/src/androidTest/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDaoTest.java index c9dc6ae9f4..029ad77c83 100644 --- a/app/src/androidTest/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDaoTest.java +++ b/app/src/androidTest/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDaoTest.java @@ -11,6 +11,7 @@ import java.util.Map; import de.westnordost.osmapi.map.data.BoundingBox; +import de.westnordost.osmapi.map.data.OsmLatLon; import static de.westnordost.streetcomplete.data.OsmModule.ONEWAY_API_URL; import static org.assertj.core.api.Assertions.*; @@ -27,13 +28,17 @@ public void testParseTwoOfDifferentWay() throws JSONException { Map> result = TrafficFlowSegmentsDao.parse( "{\"segments\":[" + - "{\"wayId\":1,\"fromNodeId\":7,\"toNodeId\":8}," + - "{\"wayId\":2,\"fromNodeId\":5,\"toNodeId\":6}," + - "]}" + "{\"wayId\":1,\"fromPosition\":{\"lon\":1, \"lat\":2},\"toPosition\":{\"lon\":5, \"lat\":6}}," + + "{\"wayId\":2,\"fromPosition\":{\"lon\":3, \"lat\":4},\"toPosition\":{\"lon\":7, \"lat\":8}}," + + "]}" ); Map> expected = new HashMap<>(); - expected.put(1L, Collections.singletonList(new TrafficFlowSegment(7, 8))); - expected.put(2L, Collections.singletonList(new TrafficFlowSegment(5, 6))); + expected.put(1L, Collections.singletonList( + new TrafficFlowSegment(new OsmLatLon(2,1), new OsmLatLon(6,5)) + )); + expected.put(2L, Collections.singletonList(new TrafficFlowSegment( + new OsmLatLon(4,3), new OsmLatLon(8,7)) + )); assertThat(result).containsAllEntriesOf(expected); } @@ -41,12 +46,15 @@ public void testParseTwoOfSameWay() throws JSONException { Map> result = TrafficFlowSegmentsDao.parse( "{\"segments\":[" + - "{\"wayId\":1,\"fromNodeId\":7,\"toNodeId\":8}," + - "{\"wayId\":1,\"fromNodeId\":5,\"toNodeId\":6}," + + "{\"wayId\":1,\"fromPosition\":{\"lon\":1, \"lat\":2},\"toPosition\":{\"lon\":5, \"lat\":6}}," + + "{\"wayId\":1,\"fromPosition\":{\"lon\":3, \"lat\":4},\"toPosition\":{\"lon\":7, \"lat\":8}}," + "]}" ); Map> expected = new HashMap<>(); - expected.put(1L, Arrays.asList(new TrafficFlowSegment(7,8), new TrafficFlowSegment(5,6))); + expected.put(1L, Arrays.asList( + new TrafficFlowSegment(new OsmLatLon(2,1), new OsmLatLon(6,5)), + new TrafficFlowSegment(new OsmLatLon(4,3), new OsmLatLon(8,7)) + )); assertThat(result).containsAllEntriesOf(expected); } diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/StreetCompleteOpenHelper.java b/app/src/main/java/de/westnordost/streetcomplete/data/StreetCompleteOpenHelper.java index a744a5598d..0e7b9b0de6 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/StreetCompleteOpenHelper.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/StreetCompleteOpenHelper.java @@ -20,12 +20,13 @@ import de.westnordost.streetcomplete.data.visiblequests.QuestVisibilityTable; import de.westnordost.streetcomplete.data.statistics.QuestStatisticsTable; import de.westnordost.streetcomplete.data.tiles.DownloadedTilesTable; +import de.westnordost.streetcomplete.quests.oneway.AddOneway; @Singleton public class StreetCompleteOpenHelper extends SQLiteOpenHelper { public static final String DB_NAME = "streetcomplete.db"; - public static final int DB_VERSION = 10; + public static final int DB_VERSION = 11; private static final String OSM_QUESTS_CREATE_PARAMS = " (" + OsmQuestTable.Columns.QUEST_ID + " INTEGER PRIMARY KEY, " + @@ -327,6 +328,14 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL(QUEST_VISIBILITY_TABLE_CREATE); } + // all oneway quest data was invalidated on version 11 + if(oldVersion < 11 && newVersion >= 11) + { + String where = OsmQuestTable.Columns.QUEST_TYPE + " = ?"; + String[] args = {AddOneway.class.getSimpleName()}; + db.delete(OsmQuestTable.NAME, where, args); + db.delete(OsmQuestTable.NAME_UNDO, where, args); + } // for later changes to the DB // ... diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOneway.java b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOneway.java index 0dc23c2cc6..041d9a4133 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOneway.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/AddOneway.java @@ -11,9 +11,11 @@ import de.westnordost.osmapi.map.data.BoundingBox; import de.westnordost.osmapi.map.data.Element; +import de.westnordost.osmapi.map.data.LatLon; import de.westnordost.osmapi.map.data.Way; import de.westnordost.streetcomplete.R; import de.westnordost.streetcomplete.data.osm.AOsmElementQuestType; +import de.westnordost.streetcomplete.data.osm.ElementGeometry; import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; import de.westnordost.streetcomplete.data.osm.download.MapDataWithGeometryHandler; import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; @@ -61,13 +63,14 @@ public AddOneway(OverpassMapDataDao overpassMapDataDao, String overpassQuery = "way(id:" + TextUtils.join(",",trafficDirectionMap.keySet()) + "); out meta geom;"; overpassMapDataDao.getAndHandleQuota(overpassQuery, (element, geometry) -> { + if(geometry == null) return; // filter the data as ImproveOSM data may be outdated or catching too much if(!FILTER.matches(element)) return; Way way = (Way) element; List segments = trafficDirectionMap.get(way.getId()); if(segments == null) return; - Boolean isForward = isForward(way, segments); + Boolean isForward = isForward(geometry, segments); // only create quest if direction can be clearly determined and is the same direction // for all segments belonging to one OSM way (because StreetComplete cannot split ways // up) @@ -80,25 +83,26 @@ public AddOneway(OverpassMapDataDao overpassMapDataDao, return true; } - /** @param way the OSM way + /** @param geometry the OSM geometry * @param trafficFlowSegments list of segments which document a road user flow * @return true if all given segments point forward in relation to the direction of the OSM way * and false if they all point backward.
* If the segments point into different directions or their direction cannot be * determined. returns null. */ - @Nullable private static Boolean isForward(@NonNull Way way, @NonNull List trafficFlowSegments) + @Nullable private static Boolean isForward(@NonNull ElementGeometry geometry, + @NonNull List trafficFlowSegments) { Boolean result = null; - List nodes = way.getNodeIds(); + List positions = geometry.polylines.get(0); for (TrafficFlowSegment segment : trafficFlowSegments) { - int fromNodeIndex = nodes.indexOf(segment.fromNodeId); - int toNodeIndex = nodes.indexOf(segment.toNodeId); + int fromPositionIndex = findClosestPositionIndexOf(positions, segment.fromPosition); + int toPositionIndex = findClosestPositionIndexOf(positions, segment.toPosition); - if(fromNodeIndex == -1 || toNodeIndex == -1) return null; - if(fromNodeIndex == toNodeIndex) return null; + if(fromPositionIndex == -1 || toPositionIndex == -1) return null; + if(fromPositionIndex == toPositionIndex) return null; - boolean forward = fromNodeIndex < toNodeIndex; + boolean forward = fromPositionIndex < toPositionIndex; if(result == null) { result = forward; @@ -111,6 +115,25 @@ else if(result != forward) return result; } + private static int findClosestPositionIndexOf(List positions, LatLon latlon) + { + double shortestDistance = 1; + int result = -1, index = 0; + for (LatLon pos : positions) + { + double distance = Math.hypot( + pos.getLongitude() - latlon.getLongitude(), + pos.getLatitude() - latlon.getLatitude()); + if(distance < 0.00005 && distance < shortestDistance) { + shortestDistance = distance; + result = index; + } + index++; + } + + return result; + } + @Override public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) { boolean isOneway = answer.getBoolean(AddOnewayForm.ANSWER); diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegment.java b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegment.java index ee8834d1b9..08d65fc4a8 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegment.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegment.java @@ -1,13 +1,17 @@ package de.westnordost.streetcomplete.quests.oneway; +import android.support.annotation.NonNull; + +import de.westnordost.osmapi.map.data.LatLon; + public class TrafficFlowSegment { - public final long fromNodeId, toNodeId; + @NonNull public final LatLon fromPosition, toPosition; - public TrafficFlowSegment(long fromNodeId, long toNodeId) + public TrafficFlowSegment(@NonNull LatLon fromPosition, @NonNull LatLon toPosition) { - this.fromNodeId = fromNodeId; - this.toNodeId = toNodeId; + this.fromPosition = fromPosition; + this.toPosition = toPosition; } @Override public boolean equals(Object o) @@ -15,12 +19,13 @@ public TrafficFlowSegment(long fromNodeId, long toNodeId) if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TrafficFlowSegment that = (TrafficFlowSegment) o; - return fromNodeId == that.fromNodeId && toNodeId == that.toNodeId; + return fromPosition.equals(that.fromPosition) && toPosition.equals(that.toPosition); } @Override public int hashCode() { - long hash = 31 * fromNodeId + toNodeId; - return (int) (hash ^ (hash >>> 32)); + int result = fromPosition.hashCode(); + result = 31 * result + toPosition.hashCode(); + return result; } } diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDao.java b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDao.java index 9a2ad05a15..f569633444 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDao.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/TrafficFlowSegmentsDao.java @@ -15,12 +15,13 @@ import java.util.Map; import de.westnordost.osmapi.map.data.BoundingBox; +import de.westnordost.osmapi.map.data.LatLon; +import de.westnordost.osmapi.map.data.OsmLatLon; import de.westnordost.streetcomplete.util.StreamUtils; /** Dao for using this API: https://github.com/ENT8R/oneway-data-api */ public class TrafficFlowSegmentsDao { - private String apiUrl; public TrafficFlowSegmentsDao(String url) @@ -54,11 +55,17 @@ public Map> get(BoundingBox bbox) throws IOExcept { result.put(wayId, new ArrayList<>()); } + result.get(wayId).add(new TrafficFlowSegment( - segment.getLong("fromNodeId"), - segment.getLong("toNodeId") + parseLatLon(segment.getJSONObject("fromPosition")), + parseLatLon(segment.getJSONObject("toPosition")) )); } return result; } + + private static LatLon parseLatLon(JSONObject pos) throws JSONException + { + return new OsmLatLon(pos.getDouble("lat"),pos.getDouble("lon")); + } } diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/WayTrafficFlowTablesHelper.java b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/WayTrafficFlowTablesHelper.java index bca70c6b5d..99c202ecbd 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/WayTrafficFlowTablesHelper.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/oneway/WayTrafficFlowTablesHelper.java @@ -25,5 +25,10 @@ public class WayTrafficFlowTablesHelper implements TablesHelper { db.execSQL(CREATE_WAY_TRAFFIC_FLOW); } + // all data was invalidated on version 11 + if(oldVersion < 11 && newVersion >= 11) + { + db.delete(WayTrafficFlowTable.NAME, null, null); + } } } From cec0f65e3ae7a5b674670612447fa224fb963d0d Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 23 Jun 2018 13:42:32 +0200 Subject: [PATCH 05/29] push version --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0d2717eb85..1b54befa41 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "de.westnordost.streetcomplete" minSdkVersion 17 targetSdkVersion 27 - versionCode 600 - versionName "6.0-beta1" + versionCode 601 + versionName "6.0-beta2" testInstrumentationRunner "android.test.InstrumentationTestRunner" buildConfigField "String", "MAPZEN_API_KEY", MAPZEN_API_KEY } From 36ca9e35356fb88f952d6889ffab03a0f04eef6a Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 23 Jun 2018 14:20:57 +0200 Subject: [PATCH 06/29] update translations --- app/src/main/res/values-ca/strings.xml | 53 +++++-- app/src/main/res/values-cs/strings.xml | 42 ++--- app/src/main/res/values-da/strings.xml | 18 +++ app/src/main/res/values-de/strings.xml | 23 +-- app/src/main/res/values-el/strings.xml | 32 ++-- app/src/main/res/values-es/strings.xml | 29 ++++ app/src/main/res/values-fi/strings.xml | 8 +- app/src/main/res/values-fr/strings.xml | 9 +- app/src/main/res/values-hu/strings.xml | 17 +- app/src/main/res/values-it/strings.xml | 70 ++------- app/src/main/res/values-nn/strings.xml | 92 ++++++++++- app/src/main/res/values-pl/strings.xml | 93 ++++------- app/src/main/res/values-pt-rBR/strings.xml | 58 ++----- app/src/main/res/values-pt/strings.xml | 3 +- app/src/main/res/values-ru/strings.xml | 20 +++ app/src/main/res/values-sv/strings.xml | 171 +++++++++++---------- 16 files changed, 406 insertions(+), 332 deletions(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 55272c5be4..7d95000c36 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -106,8 +106,6 @@ "Sinc. automàtica" "Allunya't" "Apropa't" - - "<p> Ah, algú que es preocupa per la privadesa, bé! Crec que només us tinc bones notícies:</p> <p><b>Contribucions directes</b></p> <p> @@ -125,14 +123,8 @@ La vostra ubicació només s'utilitza per a cercar automàticament missions que <p><b>Ús de dades</b></p> <p> -Com s'ha esmentat, l'aplicació es comunica directament amb la infraestructura de l'OSM. És a dir, amb l'<a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\"> </a>API Overpass</a> per a baixar les missions (de forma anònima) i amb la <a href = \"http://wiki.openstreetmap.org/wiki/API_v0.6\">API de l'OSM</a> API per a pujar els canvis.<br/> +Com s'ha esmentat, l'aplicació es comunica directament amb la infraestructura de l'OSM. És a dir, amb l'<a href=\"https://wiki.openstreetmap.org/wiki/Overpass_API\"> </a>API Overpass</a> per a baixar les missions (de forma anònima) i amb la <a href = \"http://wiki.openstreetmap.org/wiki/API_v0.6\">API de l'OSM</a> API per a pujar els canvis.<br/> No obstant això, abans de pujar els canvis, l'aplicació comprova amb un <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">fitxer de text pla</a> en el meu servidor si té prohibit de pujar canvis. Aquesta és una mesura de precaució per a poder mantenir versions de l'aplicació que tinguin errors crítics i puguin malmetre les dades de l'OSM.<br/> -</p> -<p> -Per a visualitzar el mapa, es recuperen tessel·les vectorials del servei <a href=\"https://mapzen.com/projects/vector-tiles/\">Mapzen</a>, que és anònim. El servei enregistra les sol·licituds de tessel·les per a entendre quines àrees són populars per a la pre-emmagatzematge en memòria cau i millores de rendiment. La seva plataforma també registra les adreces IP i tot l'allotjament és a Amazon pel que estan subjectes al que hi podrien fer. -</p> -<p> -(<i> Això és el que actualment no s'ha implementat encara, només vull informar-vos del que està per venir: </i>) Les dades que es mostren a la taula de classificació i el perfil s'agreguen a la informació a disposició del públic des de l'OpenStreetMap. Les dades no provenen d'aquesta aplicació, sinó bàsicament de l'historial de canvis públic dels usuaris OSM. </p>" "Activat" "Només per Wifi" @@ -294,8 +286,8 @@ En cas contrari, podeu baixar un altre teclat a la botiga d'aplicacions. Els tec "Soterrat" "Paret" "Estany" - "Veure la <a href=\"https://github.com/westnordost/StreetComplete/graphs/contributors\">llista completa de col·laboradors a GitHub</a>." - "Veure el <a href=\"https://poeditor.com/projects/view?id=97843\">projecte a POEditor</a> per la llista completa." + "Vegeu la <a href=\"https://github.com/westnordost/StreetComplete/graphs/contributors\">llista completa de col·laboradors a GitHub</a>." + "Vegeu el <a href=\"https://poeditor.com/projects/view?id=97843\">projecte a POEditor</a> per la llista completa." "Traduccions" "Col·laboradors de codi" "Autor i mantenidor" @@ -516,11 +508,20 @@ Per example 1,3 o 2-6." "Mai es mostra a %s" "Aquesta àrea de descans té lavabo?" "Quina és la senyal de límit de velocitat per %s?" + "Quina superfície tenen aquests graons aquí?" + "Quina superfície té aquesta via eqüestre aquí?" + "Quina superfície té aquest camí aquí?" + "Indiqueu-ne el més específic que hi encaixi:" "Esteu segur que no podeu determinar-ho de forma més concreta?" + "<p>Per a mostrar el mapa, s'obtenen tessel·les vectorials des de <a href=\"https://tiles.map-data.de\">map-data.de</a>. El servei enregistra les peticions de tessel·les per a estadístiques anònimes i per a detectar problemes, però suprimeix els registres pocs dies després.</p> +" + "<p> Per a algunes missions, es baixen dades addicionals de tercers. En concret, la consulta de «oneway» consulta una API, també allotjada a westnordost.de, sobre possibles candidats per a «oneways». </ P>" "No (deixeu una nota)" - "Quin tipus d'edifici és aquesta construcció=" + "Voleu restablir la selecció i ordre de les missions als valors predeterminats?" + "Quin tipus d'edifici és aquesta construcció?" "Seleccioneu un valor més específic" "Té usos múltiples" + "Indiqueu el propòsit principal d'aquest edifici. P. ex. si hi ha una botiga en la planta baixa amb apartaments a sobre, segueix sent principalment un edifici d'apartaments." "Encara és en construcció" "Residencial" "un edifici on viuen les persones" @@ -528,19 +529,27 @@ Per example 1,3 o 2-6." "la llar d'una família" "casa per a més d'una família, pot tenir comerços la planta baixa" "Edifici d'apartaments" + "Casa aïllada" + "la llar separada, sense conctacte amb altres edificis, d'una únic família" + "Casa aparellada" "dues cases unifamiliars" + "Cada adossada" "un filera de cases unifamiliars similars" "Edifici hoteler" "Dormitori" + "Casa flotant" "Bungalou" + "petita casa unifamiliar aïllada (casa d'estiu, casa de vacances, ...)" "Caravana estàtica" "Edifici comercial" "un edifici on les persones treballen, compren o altres activitats comercials" "Edifici industrial" + "p. ex. una fàbrica, taller, taller de reparacions de vehicles,..." "Edifici d'oficines" "Botigues" "Magatzem" "Quiosc" + "Tanc d'emmagatzematge" "Edifici religiós" "Església" "Capella" @@ -549,21 +558,41 @@ Per example 1,3 o 2-6." "Temple" "Pagoda" "Sinagoga" + "Centre cívic" + "edifici públic que habitualment ofereix algun servei" "Jardí d'infància" "Edifici escolar" "Col·legi" "Edifici d'hospital" "Estadi" "Estació de tren" + "Edifici de transport públic" "Edifici universitari" "Edifici governamental" + "Per a cotxes" + "Cobert per a vehícles" + "cobert per a vehicles" + "Garatge individual" + "Garatge compartit" + "Edifici d'aparcaments" + "En una granja" + "Casa d'una granja" + "l'edifici residencial d'una granja" "Edifici de granja" "qualsevol edifici en una granja que no sigui residencial" + "Hivernacle" "Altres" + "Cobert" "Cabana" + "habitatge o refugi petit, senzill" + "Teulada" "Edifici de servei" + "edifici amb maquinària, com ara bombes o transformadors" "Hangar" + "magatzem per a avions, helicòpters o altres aeronaus" "Búnquer" "No té número de casa" "L'edifici s'ha etiquetat com a:" + "Això és correcte, o només és part d'un edifici?" + "Santuari" diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index a6597e4e99..81e0e06739 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -37,8 +37,6 @@ "Cedule se jmény ulic někdy můžou být jen na jednom konci ulice. Pamatujte, že boční ulice, které patří k větší ulici, nemusí mít cedule se jménem. Ulice s domy jsou obvykle pojmenované." "Pokud jde jméno zapsat bez zkratek, tak by se měly rozepsat. Spousta obvyklých zkratek se během jejich psaní automaticky rozepisuje, ale ne všechny." "Žádná zkratka" - - "Jaké jsou otevírací hodiny %s?" "čas otevření" "čas zavření" @@ -84,13 +82,9 @@ "Licence" "GNU General Public License" "Nejste připojeni" - - - "Abyste mohli svoje odpovědi posílat přímo (bez schválení), musíte se autorizovat se svým OSM účtem. Autorizovat se teď?" + "Abyste mohli svoje odpovědi posílat přímo (bez schválení), musíte se autorizovat se svým OSM účtem. Chcete se autorizovat nyní?" "Neautorizováno" - - - "Z této verze StreetComplete je zakázáno nahrávat odpovědi! Aktualizujte, prosím, vaši verzi aplikace!" + "Tato verze StreetComplete je příliš stará. Prosím aktualizujte ji!" "Pro automatické vyhledávání úkolů ve vašem okolí zapněte určování polohy" "Nejsou tu žádné další úkoly" "Později" @@ -120,8 +114,6 @@ "Auto synchronizace" "Oddálit" "Přiblížit" - - "<p>Á, někdo, kdo se zajímá o soukromí, paráda! Myslím, že pro vás máme jen dobré zprávy:</p> <p><b>Přímé přispívání</b></p> <p> @@ -129,24 +121,18 @@ Nejdříve musíte vědět, že pomocí této aplikace skutečně a přímo při Cokoliv, čím pomocí této aplikace přispějete, bude přímo přidáno do mapy bez toho, aby byla mezi aplikací a OSM nějaká třetí strana jako je tomu např. v případě služby <a href=\"https://wheelmap.org\">wheelmap.org</a> nebo <a href=\"http://www.kort.ch\">Kortu</a>. </p> <p> -OpenStreetMap nelze upravovat anonymně, proto jsou všechny vaše změny provedené s vaším uživatelským účtem na OSM. To znamená, že datum, obsah a poloha vašich změn jsou veřejně viditelné na webu openstreetmap a připojitelné k vašemu účtu. +OpenStreetMap nelze upravovat anonymně, proto jsou všechny vaše změny provedené s vaším uživatelským účtem na OSM. To znamená, že datum, obsah a poloha vašich změn jsou veřejně viditelné na webu openstreetmap a propojené s vaším účtem. </p> <b>Poloha</b><br/> <p> -Vaše poloha je použita jen pro automatické vyhledávání „úkolů“ ve vašem okolí. Nebojte, aplikace si nechává vaši polohu jen pro sebe. +Aplikace s nikým nesdílí vaši GPS polohu. Vaše poloha se používá jen pro automatické vyhledávání „úkolů“ ve vašem okolí a pro vycentrování mapy (a její stahování) na základě vaší polohy. </p> <p><b>Použití dat</b></p> <p> Jak už bylo zmíněno, aplikace komunikuje přímo s OSM infrastrukturou, ke které patří <a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass API</a> pro stahování „úkolů“ (které je anonymní) a <a href=\"http://wiki.openstreetmap.org/wiki/API_v0.6\">OSM API</a> pro nahrávání změn.<br/> Nicméně před nahráním vašich změn aplikace zkontroluje pomocí <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">jednoduchého textového souboru</a> na mém serveru, jestli jí nebylo zakázáno nahrávání změn. To je preventivní opatření zabraňující verzím aplikace, ve kterých by mohli být kritické chyby, aby poškodili OSM data.<br/> -</p> -<p> -Pro zobrazení mapy se stahují vektorové dlaždice z projektu <a href=\"https://mapzen.com/projects/vector-tiles/\">Mapzen vector tile service</a>, který je anonymní. Projekt zaznamenává žádosti o dlaždice, aby věděl, které oblasti jsou populární a mohl je pro zvýšení výkonu uložit do mezipaměti. Projekt také zaznamenává IP adresy a jako svůj hosting používá Amazon, tak se na ně vztahují a i pravidla Amazonu. -</p> -<p> -(<i>Tohle zatím není implementováno, jen vás chci informovat o tom, na co se můžete těšit!:</i>) Data zobrazená na seznamu nejlepších a v profilu jsou shromážděná z veřejně dostupných informací na OpenStreetMap. Použitá data nejsou čerpána z této aplikace, ale z uložené historie OSM uživatelů. </p>" "Zapnuto" "Jen přes WiFi" @@ -249,24 +235,16 @@ Vámi vložené informace jsou potom vaším jménem přímo přidány do OpenSt "Výhradně tyto sporty" "Různé hry" "Vybrali jste více sportů" - - - "Má autobusová zastávka %s střechu?" + "Má autobusová zastávka %s střechu?" "Musí se na těchto toaletách platit?" "Má tato autobusová zastávka hmatovou dlažbu?" - - - "Má tento přechod hmatovou dlažbu?" + "Má tento přechod hmatovou dlažbu na obou stranách?" "Opravdu jste to zkontroloval na místě?" - - - "Má autobusová zastávka %s hmatovou dlažbu?" + "Má autobusová zastávka %s hmatovou dlažbu?" "Měly by být přidávány pouze informace zjištěné během průzkumu." "Je toto parkoviště pro kola zakryté (chráněno proti dešti)?" "V této relaci znovu nezobrazovat" - - - "Jaký povrch má cesta %s?" + "Jaký povrch tu má cesta %s?" "Jaké je předepsané omezení rychlosti na této cestě?" "Toto omezení rychlosti se zdá nepravděpodobné." "Opravdu tu není žádná značka omezující rychlost?" @@ -514,7 +492,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Žádné připojení" - "Má tramvajová zastávka %s střechu?" + "Má tramvajová zastávka %s střechu?" "Má tato tramvajová zastávka střechu?" "Má tato lavička opěrák?" "Je to stůl pro piknik" @@ -546,7 +524,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Jaký povrch má toto náměstí?" - "Jaký povrch má náměstí %s?" + "Jaký povrch tu má náměstí %s?" "Závisí to na času a dni" "Přidat časy" "Ano, ale jen..." diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 8d194f8692..8a10872c4d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -553,4 +553,22 @@ F.eks. 1,3 eller 2-6." "Skab" "Bygning" "Hvilken slags cykelparkering er dette?" + "Hvad er tømningstiderne for denne postkasse?" + "Tilføj tømningstid" + "Ingen tider beskrevet" + "Er denne vej færdiglavet?" + "Er denne cykelsti færdiglavet?" + "Er denne gangsti færdiglavet?" + "Er denne vej færdiglavet?" + "Er denne bygning færdiglavet?" + "Aldrig vist i %s" + "Har denne rasteplads toiletter?" + + + "Hvad siger hastighedsbegrænsnings skiltet for %s?" + "Hvilken overflade har disse trin?" + "Hvilken overflade har denne ridesti her?" + "Hvilket overflade har denne sti her?" + "Vælg den mest specifikke der passer:" + "Er du sikker på at du ikke kan bestemme den mere specifikt?" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e39989cf00..f8ef4cffdd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -518,16 +518,17 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Welche Oberfläche haben diese Stufen?" "Welche Oberfläche hat dieser Saumweg?" "Welche Oberfläche hat dieser Weg?" - "Wähle die exakteste aus, die zutrifft." + "Wähle die zutreffendste Art aus:" "Bist du sicher, dass es nicht genauer bestimmt werden kann?" - "<p> Um die Karte anzuzeigen werden Vektorkacheln aus <a href=\"https://tiles.map-data.de\"> map-data.de </a> abgerufen. Der Dienst protokolliert Kachel Anfragen für anonyme Statistiken und für das Erkennen von Problemen, löscht jedoch die Protokolle nach einigen Tagen. </ P>" + "<p>Um die Karte anzuzeigen + werden Vektorkacheln von <a href=\"https://tiles.map-data.de\">map-data.de</a> abgerufen. Der Dienst protokolliert Kachelanfragen für anonyme Statistiken und für das Erkennen von Problemen, löscht diese Protokolle jedoch nach einigen Tagen.</p>" "<p> Bei einigen Quests werden einige zusätzliche Daten von Dritten heruntergeladen. Insbesondere fragt der Oneway-Quest eine API an, die ebenfalls auf westnordost.de gehostet wird, nach möglichen Kandidaten für Oneways. </ P>" "Nein (Notiz hinterlassen)" "Sowohl die Aktivierung als auch die Priorität zurücksetzen?" "Als was wurde dieses Gebäude errichtet?" - "Bitte mache eine genauere Auswahl" + "Bitte treffe eine genauere Auswahl" "Hat mehrere Bestimmungen" - "Wähle einfach die Hauptbestimmung des Gebäudes. Zum Beispiel wenn es im Erdgeschoss Läden gibt aber darüber Wohnungen sind, ist es trotzdem ein Mehrfamilienhaus." + "Wähle einfach die Hauptbestimmung des Gebäudes. Wenn sich zum Beispiel im Erdgeschoss Läden befinden, aber darüber Wohnungen sind, ist es trotzdem ein Mehrfamilienhaus." "Wird noch errichtet" "Wohngebäude" "Gebäude in den Leute wohnen" @@ -535,7 +536,7 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Einfamilienhaus" "Haus für mehrere Familien, im Erdgeschoss befinden sich gelegentlich Läden" "Mehrfamilienhaus" - "freistehendes Haus" + "Freistehendes Haus" "normalerweise mit Garten rundherum" "Doppelhaus" "zwei aneinandergebaute Einfamilienhäuser" @@ -545,11 +546,11 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Wohnheim" "Hausboot" "Bungalow" - "kleines frei stehendes Haus (Gartenhaus, Ferienhaus)" + "kleines, freistehendes Haus (Gartenhaus, Ferienhaus)" "Feststehender Wohnwagen" "Gewerbliches Gebäude" "Gebäude in denen Leute arbeiten, einkaufen oder anderen gewerblichen Aktivitäten nachgehen" - "Industrielles Gebäude" + "Industriegebäude" "z.B. eine Fabrik, ein Betrieb, eine Autowerkstatt, …" "Bürogebäude" "Laden / Läden" @@ -577,7 +578,7 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Regierungsgebäude" "Für Autos" "Carport" - "ein Dach für ein Auto" + "ein überdachter Autostellplatz" "Garage" "Mehrere Garagen" "Parkhaus" @@ -585,7 +586,7 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Bauernhaus" "Wohnhaus auf einem Bauernhof" "Wirtschaftsgebäude" - "jedes Gebäude auf einem Bauernhof das kein Bauernhaus ist" + "jedes Gebäude auf einem Bauernhof, das kein Bauernhaus ist" "Gewächshaus" "Andere" "Schuppen" @@ -593,9 +594,9 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "kleine Behausung oder Unterstand" "Dach" "Betriebsgebäude" - "bestimmt für Machinen wie Pumpen oder Transformatoren" + "Gebäude für Maschinen wie Pumpen oder Transformatoren" "Hangar" - "Garage für Flugzeuge, Helikopter und Raumfahrzeuge" + "Garage für Flugzeuge, Helikopter oder Raumfahrzeuge" "Bunker" "Hat keine Hausnummer" "Das Gebäude wurde bestimmt als:" diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index bc0f49a595..a1bdc3e77b 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -108,32 +108,26 @@ "Μεγέθυνση" - "<p> Αα, κάποιος που ενδιαφέρεται για την προστασία της ιδιωτικότητας, ωραία! Νομίζω ότι έχω μόνο καλά νέα για εσάς: </ p> -<p> <b> Άμεσες Συνεισφορές </ b> </ p> + "<p>Αα, κάποιος που ενδιαφέρεται για την προστασία της ιδιωτικότητας, ωραία! Νομίζω ότι έχω μόνο καλά νέα για εσάς:</p> +<p><b>Άμεσες Συνεισφορές </b></p> <p> Καταρχάς, κατανοήστε ότι με αυτή την εφαρμογή, κάνετε πραγματικές και άμεσες συνεισφορές στο OpenStreetMap. <br/> -Οτιδήποτε συμβάλλετε σε αυτήν την εφαρμογή προστίθεται απευθείας στον χάρτη, δεν υπάρχει τρίτο μέρος μεταξύ της εφαρμογής και της υποδομής του OSM, όπως συμβαίνει με το <a href=\"https://wheelmap.org\"> wheelmap.org </a> ή το <a href=\"http://www.kort.ch\"> Kort </a>. -</ p> +Οτιδήποτε συμβάλλετε σε αυτήν την εφαρμογή προστίθεται απευθείας στον χάρτη, δεν υπάρχει τρίτο μέρος μεταξύ της εφαρμογής και της υποδομής του OSM, όπως συμβαίνει με το <a href=\"https://wheelmap.org\"> wheelmap.org</a> ή το <a href=\"http://www.kort.ch\"> Kort</a>. +</p> <p> Η επεξεργασία του OpenStreetMap ανώνυμα δεν είναι δυνατή, επομένως οι αλλαγές που κάνετε πραγματοποιούνται με τον λογαριασμό σας χρήστη OSM. Αυτό σημαίνει ότι η ημερομηνία, το περιεχόμενο και η έμμεση τοποθεσία των αλλαγών σας είναι ορατά δημοσίως στον ιστότοπο openstreetmap και οφείλονται στον λογαριασμό σας. -</ p> +</p> -<b> Τοποθεσία </ b> <br/> +<b>Τοποθεσία </ b><br/> <p> -Η τοποθεσία σας χρησιμοποιείται μόνο για αυτόματη σάρωση αναζητήσεων γύρω σας. Χωρίς ανησυχία, η εφαρμογή διατηρεί την τοποθεσία σας για τον εαυτό της. -</ p> +Η εφαρμογή δεν μοιράζεται την τοποθεσία σας του GPS με κανέναν. Χρησιμοποιείται για την αυτόματη σάρωση αναζητήσεων στην περιοχή σας (και, συνεπώς, να κατεβάσετε) τον χάρτη γύρω από την τοποθεσία σας. +</p> -<p> <b> Χρήση δεδομένων </ b> </ p> +<p><b>Χρήση δεδομένων</ b></ p> <p> -Όπως αναφέρθηκε, η εφαρμογή επικοινωνεί απευθείας με την υποδομή OSM. Δηλαδή, με το <a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\"> API overpass </a> για τη λήψη αποσπασμάτων (που είναι ανώνυμα) και με το <a href = \"http: / /wiki.openstreetmap.org/wiki/API_v0.6\"> API του OSM </a> για μεταφόρτωση αλλαγών. <br/> -Ωστόσο, πριν μεταφορτώσετε τις αλλαγές σας, η εφαρμογή ελέγχει με ένα <a href=\"http://www.westnordost.de/streetcomplete/banned_versions.txt\"> απλό αρχείο κειμένου </a> στο διακομιστή μου αν έχει απαγορευτεί η μεταφόρτωση των αλλαγών. Αυτό είναι ένα προληπτικό μέτρο για να μπορέσετε να κρατήσετε τις εκδόσεις της εφαρμογής που παρακολουθούν αν έχουν κρίσιμα σφάλματα από την ενδεχόμενη καταστροφή των δεδομένων OSM. <br/> -</ p> -<p> -Για να εμφανιστεί ο χάρτης, τα διανυσματικά πλακίδια ανακαλούνται από την <a href=\"https://mapzen.com/projects/vector-tiles/\"> υπηρεσία πλακιδίων Mapzen</a>, η οποία είναι ανώνυμη. Η υπηρεσία καταγράφει τα αιτήματα των πλακιδίων για να κατανοήσουν ποιες περιοχές είναι δημοφιλείς για προσωρινή αποθήκευση και βελτιώσεις απόδοσης. Η πλατφόρμα τους καταγράφει επίσης διευθύνσεις IP και όλη η φιλοξενία τους βρίσκεται στο Amazon, ώστε να υπόκεινται σε αυτά που μπορούν να κάνουν. -</ p> -<p> -(<i> Αυτό δεν έχει εφαρμοσθεί ακόμα, απλά θέλω να σας ενημερώσω τι θα έρθει!: </ i>) Τα δεδομένα που εμφανίζονται στον leaderboard και στο προφίλ συγκεντρώνονται από διαθέσιμες στο κοινό πληροφορίες από το OpenStreetMap. Τα δεδομένα δεν προέρχονται από αυτήν την εφαρμογή, αλλά βασικά από το δημόσιο ιστορικό δέσμευσης των χρηστών του OSM. -</ p>" +Όπως αναφέρθηκε, η εφαρμογή επικοινωνεί απευθείας με την υποδομή OSM. Δηλαδή, με το <a href=\"https://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass API</a>για τη λήψη αναζητήσεων (που είναι ανώνυμα) και με το <a href=\"https://wiki.openstreetmap.org/wiki/API_v0.6\">OSM API</a> για μεταφόρτωση αλλαγών. <br/> +Ωστόσο, πριν μεταφορτώσετε τις αλλαγές σας, η εφαρμογή ελέγχει με ένα <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">simple text file</a> στο διακομιστή μου είτε έχει απαγορευτεί η μεταφόρτωση των αλλαγών. Αυτό είναι ένα προληπτικό μέτρο για να μπορέσει να κρατήσει τις εκδόσεις της εφαρμογής που καταλήγουν να έχουν κρίσιμα σφάλματα από την ενδεχόμενη καταστροφή των δεδομένων OSM.</ p> +" "Ανοιχτό" "Μόνο στο Wifi" "Κλειστό" @@ -595,7 +589,7 @@ "κάθε κτίριο σε μία φάρμα που δεν είναι κτίριο κατοικιών" "Θερμοκήπιο" "Άλλο" - "Αποθήκη" + "Υπόστεγο" "Καλύβα" "μικρή, απλή κατοικία ή καταφύγιο" "Στέγη" diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 188fcd34c1..ca04d61342 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -563,22 +563,35 @@ Por ejemplo 1,3 o 2-6." "¿Que tipo de material tiene este camino?" "Selecciona el mas especifico que encaje" "¿Estas seguro que no puedes determinarlo mas específicamente?" + "<p>Para poder mostrar el mapa cargamos las distintas porciones en formato vectorial de <a href=\"https://tiles.map-data.de\">map-data.de</a>. El servicio lleva un registro anónimo de las peticiones con fines estadísticos y de corrección de errores pero los borramos al cabo de unos días.</p>" + "<p> En algunas misiones, se descargan datos adicionales de terceros. En particular, la búsqueda de calles de sentido único consulta una API, que esta alojada en westnordost.de, sobre posibles calles de sentido único. </ p>" "No (dejar nota)" + "¿Restablecer la activación de búsquedas y el orden predeterminado?" + "¿Para qué se construyó este edificio?" "Por favor seleccione un valor más específico." "Tiene múltiples propósitos" "Seleccione solamente el propósito principal de este edificio. P.ej. si hay una tienda en la planta baja con apartamentos encima, sigue siendo principalmente un edificio de apartamentos." "Todavía esta en construcción" "Residencial" + "edificio habitable" "Casa" + "vivienda unifamiliar" + "edificio de viviendas, puede tener locales comerciales a nivel de calle" "Edificio apartamento" "Vivienda unifamiliar" + "edificio residencial independiente, normalmente habitado por una única familia" + "Casa Semi-adosada" + "par de viviendas unifamiliares" "Casa adosada" + "una hilera de viviendas unifamiliares pegadas" "Edificio de hotel" "Residencia o dormitorio" "Casa flotante" "Bungalow" + "pequeña casa unifamiliar (casa de verano, casa de vacaciones, ...)" "Caravana estática" "Edificio comercial" + "edificio donde la gente trabaja, compra o hace otras actividades comerciales" "Edificio industrial" "p.e. una fábrica, un taller, un taller de repación de vehículos, ..." "Edificio de oficinas" @@ -594,6 +607,8 @@ Por ejemplo 1,3 o 2-6." "Templo" "Pagoda" "Sinagoga" + "Edificio público" + "edificio multiusos en el que se suelen desarrollar varias actividades" "Jardín de infancia" "Escuela" "Colegio" @@ -602,17 +617,31 @@ Por ejemplo 1,3 o 2-6." "Estación de tren" "Edificio de transporte público" "Universidad" + "Edificio del gobierno" + "Para coches, automóviles o turismos" + "Marquesinas de aparcamiento" + "techo o cobertizo para vehículos privados" + "Garaje individual" + "Garajes múltiples" + "Edificio de aparcamiento" + "En una granja" "Granja" + "la parte residencial de una granja" + "Edificio agrícola" "edificio auxiliar de una granja que no es una vivienda" "Invernadero" "Otro" "Covertizo" "Choza" "chozo o choza, refugio pequeño y tosco" + "Tejado" + "Edificio de servicio" + "suele contener maquinaria como bombas o transformadores" "Hanger" "edificio usado para guardar aviones, helicópteros o naves espaciales" "Bunker" "No tiene numero de casa" "El edificio fue etiquetado como:" + "¿Seguro que esta etiqueta define al edificio entero?" "Santuario" diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 7c71f2fbb2..9e6916cbae 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -492,7 +492,7 @@ Muutoin, voit ladata toisen näppäimistön sovelluskaupasta. Suosittuja näppä "Normaalisti näyttää suunnilleen tältä: " "Metalli" "Onko täällä pyörätietä? Minkä tyyppinen?" - "Mikä on tämän silan rakenne?" + "Mikä on tämän sillan rakenne?" "Minkälaisen internetyhteyden %s tarjoaa?" @@ -563,7 +563,7 @@ Muutoin, voit ladata toisen näppäimistön sovelluskaupasta. Suosittuja näppä "Oletko varma, että et voi määritellä tarkemmin?" "Ei (jätä " "Resetoi kysymysten aktivoinnit ja palautua järjestys oletukseksi?" - "Mihin tämä rakennus on rakennettu?" + "Mikä on tämän rakennuksen käyttötarkoitus?" "Valitse tarkempi arvo" "Sillä on monia tarkoituksia" "Yksinkertaisesti valitse rakennuksen päätarkoitus. Esim. jos alkerrassa on kauppa ja sen yläpuolella asumiseen tarkoitettu kerrostalo, niin sillon se on pääasiassa asuintalo" @@ -629,9 +629,9 @@ Muutoin, voit ladata toisen näppäimistön sovelluskaupasta. Suosittuja näppä "ei asuinkäyttöön tarkoitetut rakennuksen maatilalla" "Kasvihuone" "Muut" - "Vaja" + "Vaja tai lato" "Maja" - "pieni, vaatimaton asumus tai majoitus" + "Pieni vaatimaton rakennus, ei pidempiaikaiseen majoitukseen." "Katos" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7dd86f022e..d11dfc370d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -611,11 +611,14 @@ Partiellement signifie qu’un fauteuil roulant peut entrer et utiliser les toil "Quelle surface ce chemin a-t-il ?" "Sélectionner le plus spécifique qui convient :" "Êtes vous sûr de ne pas pouvoir le déterminer plus spécifiquement ?" - "<p>Pour afficher la carte, les tuiles vectorielles sont téléchargées depuis <a href=\"https://tiles.map-data.de\">map-data.de</a>. Ce service enregistre les demandes de tuiles à des fins de statistiques anonymes et de détection d'erreurs. Les journaux de demandes sont supprimés après quelques jours.>p>" + "<p>Pour afficher la carte, les tuiles vectorielles sont téléchargées depuis <a href=\"https://tiles.map-data.de\">map-data.de</a>. Ce service enregistre les demandes de tuiles à des fins de statistiques anonymes et de détection d'erreurs. Les journaux de demandes sont supprimés après quelques jours.</p>" + + "<p> Pour certaines quêtes, des données de tiers sont téléchargées. En particulier pour les quêtes sur les voies à sens unique, une API tierce est utilisées. NB : cette API tiers est également hébergée sur <a href=\"www.westnordost.de\">www.westnordost.de</a>.<p>" "Non (laisser une note)" "Réinitialiser les types quêtes à afficher et leur ordre d'affichage ?" + "En tant que quoi ce bâtiment a-t-il été construit ?" "Sélectionnez une valeur plus précise." @@ -641,8 +644,8 @@ Partiellement signifie qu’un fauteuil roulant peut entrer et utiliser les toil "Résidence universitaire, foyer" "Maison flottante" "Bungalow" - "petite maison détachée de plain pied" - "Mobilhome" + "petite maison détachée de plain-pied" + "mobil-home" "Bâtiment commercial" "Bâtiment où des gens travaillent ou ont d'autres activités commerciales" "Industriel" diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5b18710915..5ec37fa715 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -446,7 +446,7 @@ Vagy le is tölthetsz egy másik billentyűzetet az áruházból. Népszerű bil "Kérdések kiválasztása" "Engedélyezve" "Kérdéstípus" - "Alaphelyzet" + "Alaphelyzetbe állítás" "Nyomd hosszan, majd mozgasd a kérdést, hogy átrendezd a prioritását a letöltéshez és a térképen való megjelenítéshez." "Visszavonás" "Mégse" @@ -567,6 +567,8 @@ A „részben” azt jelenti, hogy kerekesszékkel ugyan be lehet menni és lehe "<p>A térkép megjelenítéséhez a vektoros csempék a <a href=\"https://tiles.map-data.de\">map-data.de</a> oldalról származnak. A szolgáltatás naplózza a csempelekéréseket, hogy névtelen statisztikát készítsen és problémákat észleljen. A naplók pár napon belül töröltetnek.</p> " "<p>Egyes kérdésekhez más, harmadik felek adatai is le vannak töltve. Különösen az egyirányú utcák lekérése egy (szintén a westnordost.de kiszolgálóján lévő) API-n keresztül zajlik.</p>" + "Nincs (megjegyzés írása)" + "Alaphelyzetbe állítod az engedélyezett kérdéstípusokat és a sorrendet is?" "Milyen célra épült ez az épület?" "Kérjük, válassz konkrétabb értéket." "Többcélú" @@ -587,6 +589,8 @@ A „részben” azt jelenti, hogy kerekesszékkel ugyan be lehet menni és lehe "Szállodaépület" "Kollégium" "Lakóhajó" + "Bungaló" + "önállóan álló, kis ház (nyári lak, hétvégi ház stb.)" "Rögzített lakókocsi" "Üzleti épület" "ahol emberek dolgoznak, vásárolnak vagy más üzleti tevékenységet végeznek" @@ -605,6 +609,8 @@ A „részben” azt jelenti, hogy kerekesszékkel ugyan be lehet menni és lehe "Nem keresztény templom" "Pagoda" "Zsinagóga" + "Közösségi épület" + "valamely hasznos vagy fontos létesítménynek otthont adó középület" "Óvodaépület" "Iskolaépület" "Főiskolai épület" @@ -614,6 +620,9 @@ A „részben” azt jelenti, hogy kerekesszékkel ugyan be lehet menni és lehe "Tömegközlekedési épület" "Egyetemi épület" "Kormányzati épület" + "Autóknak" + "Garázstető" + "tető egy autó fölött" "Egy garázs" "Több garázs" "Parkolóház" @@ -624,11 +633,17 @@ A „részben” azt jelenti, hogy kerekesszékkel ugyan be lehet menni és lehe "a tanyán lévő minden nem lakóépület" "Üvegház" "Egyéb" + "Fészer" + "Kunyhó" + "kicsi, egyszerű lakhely vagy menedékhely" "Tető" + "Kiszolgáló épület" + "gépészetet (pl. szivattyú, transzformátor) tartalmazó épület" "Hangár" "repülőgép, helikopter, űrhajó tárolására szolgáló épület" "Bunker" "Nincs házszáma" "Az épület címkéje:" "Helyes ez így, és ez nem csak egy épületrész?" + "Szentély" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 58c8ec837a..8839674056 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -37,8 +37,6 @@ "Spesso il segnale stradale è solamente ad un'estremità della strada. Inoltre potrebbero esserci segnali stradali aggiuntivi per vie laterali che appartengono a una strada più grande. Di solito, qualsiasi strada con case ha un nome." "Se il nome può essere scritto senza un'abbreviazione, allora dovrebbe essere scritto per intero. Molte abbreviazioni comuni vengono automaticamente rese per esteso durante la digitazione." "Nessuna abbreviazione" - - "Quali sono gli orari di apertura di %s?" "orario di apertura" "orario di chiusura" @@ -61,8 +59,6 @@ "Annulla" "Trova le missioni in zona" "Carica risposte" - - "Non hai dato alcuna risposta" "chiudi" "Errore durante la ricerca di missioni" @@ -84,12 +80,8 @@ "Licenza" "GNU General Public License" "Sei offline" - - - "Hai bisogno di autorizzare il tuo account OSM per inviare le tue risposte. Procedo con l'autorizzazione?" + "Hai bisogno di autorizzare con il tuo account OSM per pubblicare le tue risposte. Procedo con l'autorizzazione?" "Non autorizzato" - - "Questa versione di StreetComplete è troppo vecchia. È necessario aggiornarla!" "Per individuare le missioni da svolgere in zona è necessario abilitare la localizzazione" "Non sono disponibili ulteriori missioni" @@ -116,30 +108,24 @@ "Auto-Sync" "Rimpicciolisci" "Ingrandisci" - - - "<p>Ah, qualcuno che ha cura per la privacy. Bello! Io penso di avere solo buone notizie per te:</p> + "<p>Ah, qualcuno che si interessa della privacy. Bello! Penso di avere solo buone notizie per te:</p> <p><b>Contributi diretti</b></p> <p>Prima di tutto, va detto che con questa applicazione, si danno contributi effettivi e diretti a OpenStreetMap.<br/> -Qualsiasi contributo con questa applicazione viene direttamente aggiunto alla mappa, non vi è alcun intermediario fra l'app e l'infrastruttura di OSM, come invece accade nel caso di <a href=\"https://wheelmap.org\">wheelmap.org</a> o <a href=\"http://www.kort.ch\">Kort</a>. +Qualsiasi contributo con questa applicazione viene direttamente aggiunto alla mappa, non vi è alcun intermediario fra l’app e l’infrastruttura di OSM, come invece accade nel caso di <a href=\"https://wheelmap.org\">wheelmap.org</a> o di <a href=\"http://www.kort.ch\">Kort</a>. </p> <p> -La modifica anonima in OpenStreetMap non è possibile, pertanto tutte le modifiche apportate sono realizzate con l'account utente OSM, il che significa anche che le modifiche apportate al mappa sono visibili al pubblico sul sito web di OpenStreetMap. +La modifica anonima in OpenStreetMap non è possibile, pertanto tutte le modifiche apportate sono effettuate con l'account utente OSM, il che significa che il contenuto e la posizione delle modifiche apportate alla mappa sono visibili pubblicamente sul sito web di OpenStreetMap e tali modifiche sono attribuibili al tuo account. </p> <b>Posizione geografica</b><br/> <p> -La posizione viene utilizzata solo per la scansione automatica per le missioni che ti circondano. Nessun problema, l'applicazione mantiene la posizione di per se stessa. +Questa app non condivide al tua posizione GPS con nessuno. Essa viene utilizzata solo per la ricerca automatica di missioni nei tuoi dintorni e per centrare (e quindi scaricare) la mappa dove ti trovi. </p> + <p><b> Utilizzo dei dati</b></p> <p> -Come accennato, l'applicazione comunica direttamente con l'infrastruttura OSM. Cioè, con <a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass API</a> per il download di missioni (che è anonimo) e con le <a href=\"http://wiki.openstreetmap.org/wiki/API_v0.6\">OSM API</a> per il caricamento di modifiche. <br/> -Tuttavia, prima di caricare le modifiche, l'app fa una verifica con un <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">semplice file di testo</a> sul mio server per controllare se le è stato vietato il caricamento di eventuali modifiche. Si tratta di una misura precauzionale che impedisce ad alcune versioni dell'app contenenti bug critici di danneggiare i dati OSM<br/> -</p> -<p> -Per visualizzare la mappa, vengono utilizzati tile vettoriali dal <a href=\"https://mapzen.com/projects/vector-tiles/\">servizio di Mapzen</a> (anche questo anomimo). Il servizio mantiene dei log sulle tile vettoriali richieste allo scopo di identificare le aree più popolari per il pre-caching e il miglioramento delle prestazioni. La loro piattaforma registra anche gli indirizzi IP. Tutto il loro hosting è su Amazon pertanto sono soggetti a quei vincoli</p> -<p> -(<i>questa funzione è in realtà non ancora implementata, ma voglio informare su ciò che è potrebbe accadere: </i>) I dati riportati nella classifica e nel profilo sono creati dalla aggregazione di informazioni pubblicamente disponibili su OpenStreetMap. I dati non vengono da questa applicazione ma dallo storico dei dati inviati dagli utenti OSM +Come accennato, l’applicazione comunica direttamente con l’infrastruttura OSM. Cioè, con <a href=\"https://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass API</a> per lo scarico delle missioni (che è anonimo) e con le <a href=\"https://wiki.openstreetmap.org/wiki/API_v0.6\">OSM API</a> per il caricamento sul server delle modifiche. <br/> +Tuttavia, prima di caricare le modifiche, l’app fa una verifica su un <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">semplice file di testo</a> nel mio server per controllare se le è stato vietato il caricamento di modifiche. Si tratta di una misura precauzionale che impedisce ad alcune versioni dell’app contenenti bug critici di danneggiare i dati OSM<br/> </p>" "Attivo" "Solo con WiFi" @@ -162,9 +148,7 @@ Per visualizzare la mappa, vengono utilizzati tile vettoriali dal <a href=\"h "Bolognini" "Legno" "Qual è il nome di questo luogo?" - - - "C'è un marciapiede in questa strada?" + "Questa strada ha un marciapiede?" "La mappa è orientata con il nord in alto" "Solo sul lato nord" "Solo sul lato sud" @@ -240,22 +224,16 @@ Le informazioni inserite vengono aggiunte direttamente su OpenStreetMap a tuo no "Nello specifico questi" "Utilizzo generico" "Hai selezionato molti sport" - - "La fermata dell'autobus %s ha una pensilina?" "Questi servizi igienici sono a pagamento?" "Questa fermata dell'autobus ha un pavimento tattile?" "Questo attraversamento pedonale ha un'indicazione tattile su entrambi i lati?" "Hai controllato questa cosa sul posto?" - - "La fermata dell'autobus %s ha un pavimento tattile?" "Sarebbe più opportuno inserire dati verficati sul posto." "Questo parcheggio per biciclette è al coperto (protetto dalla pioggia)?" "Non mostrarlo più per questa sessione" - - - "Che tipo di pavimentazione ha la strada %s?" + "Che tipo di pavimentazione ha la strada %s in questo punto?" "Cosa indica il cartello del limite di velocità per questa strada?" "Questo limite di velocità sembra improbabile" "Si è certi che non vi sia un limite?" @@ -272,8 +250,6 @@ Se non ci sono segni lungo tutta la strada che si applicano alla sezione evidenz "Paddle tennis" "Giochi irlandesi" "Sepak Takraw" - - "%s è accessibile con la sedia a rotelle?" "Parzialmente" "Normalmente gli stalli delle bici possono essere usati da entrambi i lati per parcheggiare la propria bicicletta." @@ -282,26 +258,14 @@ Se non ci sono segni lungo tutta la strada che si applicano alla sezione evidenz "Questa entrata della metro è accessibile con la sedia a rotelle?" "Questa stazione dei treni è accessibile con la sedia a rotelle?" "Questo luogo è accessibile con la sedia a rotelle?" - - "La stazione degli autobus %s è accessibile con la sedia a rotelle?" - - "L'entrata della metro %s è accessibile con la sedia a rotelle?" - - "La stazione dei treni %s è accessibile con la sedia a rotelle?" - - "Il luogo %s è accessibile con la sedia a rotelle?" "\"Parzialmente\" significa che c'è non più di un gradino per entrare nel negozio e che si può accedere con la sedia a rotelle alla maggior parte delle stanze." "\"Parzialmente\" significa che esiste almeno un gradino di accesso." - - "Il nome %s contiene un'abbreviazione?" "Questo bagno ha un fasciatoio?" - - "%s ha un fasciatoio?" "Che tipo di differenziata si applica?" "Centro" @@ -381,8 +345,6 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "Noci" "Agave sisalana" "Questo tratto di strada è illuminato?" - - "%s è una strada illuminata in questo punto?" "Questo tratto di strada è illuminato?" "fa uso di sensore di movimento" @@ -471,8 +433,6 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "È una strada agricola o forestale" "Nessuna delle precedenti, semplicemente non ha un nome" "Questi servizi igienici sono accessibili con la sedia a rotelle?" - - "I servizi igienici %s sono accessibili con la sedia a rotelle?" "Se i servizi igienici sono accessibili con la sedia a rotelle potrebbe esserci un simbolo come questo. \"Parzialmente\" significa che con la sedia a rotelle si può entrare e utilizzare i servizi igienici, ma non ci sono barre d'appoggio o sanitari per disabili." @@ -487,21 +447,15 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "Metallo" "C'è una pista ciclabile qui? Di che tipo?" "Quale è la struttura di questo ponte?" - - "Che tipo di connessione internet offre %s" "Wi-Fi" "Cavo (LAN)" "Computer con accesso ad internet" "Nessuna connessione" - - "La fermata del tram %s ha una pensilina?" "Questa fermata del tram ha una pensilina?" "Questa panchina ha lo schienale?" "È un tavolo da picnic" - - "Quale religione è praticata a %s?" "Cristianesimo" "Islamismo" @@ -528,8 +482,6 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "È solo per i clienti" "Qual è il nome di questa strada pedonale?" "Che tipo di pavimentazione ha questa piazza?" - - "Che tipo di pavimentazione ha la piazza %s?" "Dipende da giorno e ora" "Aggiungi orari" @@ -557,7 +509,7 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "Questo edificio è completato?" "Mai mostrato in %s" "Quest' area di servizio ha un bagno?" - Qual è il limite di velocità per %s? + "Qual è il limite di velocità per %s?" "Che tipo di pavimentazione hanno questi gradini?" "Che tipo di pavimentazione ha questo percorso equestre?" "Che tipo di pavimentazione ha questo sentiero?" diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index 1a68c330c1..7c01bb0331 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -106,9 +106,7 @@ "Automatisk synkronisering" "Zoom ut" "Zoom inn" - - - "<p>Ah, nokon som bryr seg om personvern – flott! Eg trur eg berre har gode nyheiter til deg:</p><p><b>Direkte bidrag</b></p><p>Merk først at du med denne appen gjev faktiske, direkte bidrag til OpenStreetMap.<br/>Alt du som bidreg med vert lagt direkte til kartet; det finst ikkje nokon tredjepart mellom appen og OSM-infrastrukturen, som det for eksempel finst med <a href=\"https://wheelmap.org\">wheelmap.org</a> og <a href=\"http://www.kort.ch\">Kort</a>.</p><p>Det er ikkje mogleg å redigera OpenStreetMap anonymt, så alle endringane dine vert gjorde med OSM-brukarkontoen din. Dette medfører at tidspunktet, innhaldet og (implisitt) staden du var på, vert synleg for alle på OpenStreetMap-nettstaden og vert knytte til brukarkontoen din.</p><b>Posisjon</b><br/><p>Posisjonsdataa dine vert berre brukt til å automatisk søkja opp oppdrag nær deg. Appen held denne informasjonen for seg sjølv.</p><p><b>Databruk</b></p><p>Som nemnt kommuniserer appen direkte med OSM-infrastrukturen, nærare bestemt med <a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass-API-et</a> for nedlasting av oppdrag (dette er anonymt) og med <a href=\"http://wiki.openstreetmap.org/wiki/API_v0.6\">OSM-API-et</a> for opplasting av endringar.<br/>Men før appen lastar opp endringane dine, sjekkar han via <a href=\"http://www.westnordost.de/streetcomplete/banned_versions.txt\">ei enkel tekstfil</a> på vevtenaren min on han er utestengd for å lasta opp endringar. Dette er ein «føre var»-funksjon for å hindra at versjonar av appen som har kritiske feil kan komma til å øydeleggja OSM-data.<br/></p><p>For å visa kartet, vert vektorbaserte kartfliser lasta ned frå <a href=\"https://mapzen.com/projects/vector-tiles/\">Mapzen-tenesta</a>. Det er òg anonymt. Tenesta loggar førespurnadar om kartfliser for å finna ut kva område som er populære, slik at desse kan gjerast klar på førehand, for at ting skal gå raskare. Ho loggar òg IP-adresser og brukar Amazon som tenesteleverandør, og er underlagt deira reglar og praksis.</p><p>(<i>Følgjande er ikkje implementert enno, og er berre tips om kva som er planlagt:</i>) Dataa vist på poengtavla og profilen vert samanstilt frå offentleg tilgjengeleg informasjon frå OpenStreetMap. Desse dataa kjem ikkje frå denne appen, men frå innsendingshistorikken til OSM-brukarar.</p>" + "<p>Ah, nokon som bryr seg om personvern – flott! Eg trur eg berre har gode nyheiter til deg:</p><p><b>Direkte bidrag</b></p><p>Merk først at du med denne appen gjev faktiske, direkte bidrag til OpenStreetMap.<br/>Alt du som bidreg med vert lagt direkte til kartet; det finst ikkje nokon tredjepart mellom appen og OSM-infrastrukturen, som det for eksempel finst med <a href=\"https://wheelmap.org\">wheelmap.org</a> og <a href=\"http://www.kort.ch\">Kort</a>.</p><p>Det er ikkje mogleg å redigera OpenStreetMap anonymt, så alle endringane dine vert gjorde med OSM-brukarkontoen din. Dette medfører at tidspunktet, innhaldet og (implisitt) staden du var på, vert synleg for alle på OpenStreetMap-nettstaden og vert knytte til brukarkontoen din.</p><b>Posisjon</b><br/><p>Appen delar ikkje GPS-posisjonen din med nokon. Han vert berre brukt til å automatisk søkja opp oppdrag og visa (og såleis lasta ned) kartet der du er.</p><p><b>Databruk</b></p><p>Som nemnt kommuniserer appen direkte med OSM-infrastrukturen, nærare bestemt med <a href=\"https://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass-API-et</a> for nedlasting av oppdrag (dette er anonymt) og med <a href=\"https://wiki.openstreetmap.org/wiki/API_v0.6\">OSM-API-et</a> for opplasting av endringar.<br/>Men før appen lastar opp endringane dine, sjekkar han via <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">ei enkel tekstfil</a> på vevtenaren min on han er utestengd for å lasta opp endringar. Dette er ein «føre var»-funksjon for å hindra at versjonar av appen som har kritiske feil kan komma til å øydeleggja OSM-data.<br/>" "På" "Berre på Wi-Fi" "Av" @@ -483,8 +481,94 @@ som intervall skilde med bindestrek: «1,3» eller «2-6»." "Er denne sykkelvegen no ferdigstilt?" "Er denne gangvegen no ferdigstilt?" "Er dette vegen no ferdigstilt?" - "Er denne bygninga no ferdigstilt?" + "Er denne bygningen no ferdigstilt?" "Vis aldri i %s" "Finst det toalett på denne rasteplassen?" "Kva fartsgrense viser skiltet på %s?" + "Kva materiale er desse trappene laga av?" + "Kva vegdekke har denne ridevegen her?" + "Kva vegdekke har denne stien her?" + "Vel det mest spesifikke som passar:" + "Er du sikker på at du ikkje kan fastsetja det meir presist?" + "<p>For å visa kartet vert vektorbaserte kartfliser lasta ned frå <a href=\"https://tiles.map-data.de\">map-data.de</a>. Denne tenesta loggar førespurnadar om kartfliser for å laga anonym statistikk og for å oppdaga eventuelle problem, men slettar loggfilene etter få dagar.</p>" + "<p>For nokre oppdrag vert tilleggsdata frå tredjepartar lasta ned. Søket etter oppdrag om einvegskøyrde gater brukar eit API på westnordost.de for å finna kandidatar for einvegskøyring.</p>" + "Ingen (legg att ein merknad)" + "Vil du nullstilla både type oppdrag og rekkjefølgje?" + "Kva er denne bygningen laga for?" + "Vel ein meir spesifikk verdi." + "Han har fleire bruksområde" + "Vel det bygningen hovudsakleg vert brukt til. Viss han for eksempel har ein butikk på gateplan og leilegheiter i etasjane over, er han hovudsakleg ei bustadblokk." + "Han er framleis under oppføring" + "Bustadar" + "bygning der det bur folk" + "Hus" + "hus for éin familie" + "hus for fleire familiar, og kan ha butikkar på gateplan" + "Bustadblokk" + "Villa" + "frittståande bustadhus for éin familie" + "Tomannsbustad" + "eit hus delt i to, for to familiar" + "Rekkjehus" + "ei rekkje hus tett inntil kvarandre" + "Hotellbygning" + "Studentby/internat" + "Husbåt" + "Bungalow" + "lite, éinetasjes hus (sommarhus, feriehytte, …)" + "Husvogn" + "Forretningsbygg" + "bygning der folk arbeidar, handlar eller driv annan næringsverksemd" + "Industribygning" + "for eksempel ein fabrikk, ein maskinhall eller ein verkstad" + "Kontorbygning" + "Butikk(ar)" + "Lager" + "Frittståande kiosk" + "Lagertank" + "Religionsbygning" + "Kyrkje" + "Kapell" + "Katedral" + "Moské" + "Tempelbygning" + "Pagode" + "Synagoge" + "Samfunnsbygning" + "offentleg bygning der ein tilbyr ei teneste" + "Barnehagebygning" + "Skulebygning" + "Høgskulebygning" + "Sjukehusbygning" + "Stadion" + "Togstasjon" + "Offentleg transport" + "Universitetsbygning" + "Statleg bygning" + "For bilar" + "Bilbås (carport)" + "tak over ein bil" + "Enkeltgarasje" + "Fleire garasjar" + "Parkeringshus" + "På ein gard" + "Våningshus" + "bustadhus på ein gard" + "Gardsbygning" + "bruksbygning på garden (ikkje bustadhus)" + "Drivhus" + "Annan" + "Skur" + "Hytte" + "lita, primitiv hytte" + "Tak" + "Anleggsbygg" + "pumpestasjon, trafokiosk eller anna maskinbygg" + "Hangar" + "bygning eller hall for lagring av fly og helikopter" + "Bunker" + "Det har ikkje noko husnummer" + "Bygningen vart definert som:" + "Er dette rett og er det ikkje berre ein del av ein bygning?" + "Heilagstad" diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 267a312bbc..5f934b1642 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -35,8 +35,6 @@ "Czasami tablica z nazwą ulicy znajduje się tylko na jednym jej końcu. Zdarza się także, że boczne uliczki odchodzące od ulicy glównej nie są wyraźnie oznakowane. Zwykle każda ulica, przy której stoją budynki, ma jakąś nazwę." "Jeśli się da, nazwa powinna być podana w całości, bez skrótów. Wiele powszechnych skrótów jest rozwijanych automatycznie podczas pisania, ale nie wszystkie." "Nie ma skrótów" - - "Jakie są godziny otwarcia %s?" "Godziny otwarcia" "Godziny zamknięcia" @@ -59,8 +57,6 @@ "Anuluj" "Szukaj tutaj zadań" "Wyślij odpowiedzi" - - "Formularz jest pusty" "zamknij" "Błąd podczas szukania zadań" @@ -82,12 +78,8 @@ "Licencja" "GNU General Public License" "Brak połączenia z siecią" - - "Musisz się zalogować do swojego konta w OSM, aby wysyłać odpowiedzi. Zalogować się teraz?" "Brak autoryzacji" - - "Ta wersja StreetComplete nie może już wysyłać odpowiedzi! Zaktualizuj wersję aplikacji." "Aby automatycznie szukać zadań wokół ciebie, włącz lokalizacje." "Brak nowych zadań" @@ -103,7 +95,7 @@ "Różnie, zależnie od miesiąca" "Brak stałych godzin otwarcia" "Opisz godziny otwarcia" - "Krótko i zwięźle, najlepiej tak jak jest napisane na tabliczce, np. \"po uzgodnieniu terminu\". Brak tabliczki nie koniecznie oznacza braku stałych godzin otwarcia." + "Krótko i zwięźle, najlepiej tak jak jest napisane na tabliczce, np. \"po uzgodnieniu terminu\". Brak tabliczki niekoniecznie oznacza braku stałych godzin otwarcia." "Ile pięter ma ten budynek?" "Ile pięter ma ta część budynku?" "Jaki ogólny kształt dachu ma ten budynek?" @@ -114,8 +106,6 @@ "Autosynchronizacja" "Oddal" "Przybliż" - - "<p>O, dbasz o swoją prywatność, fajnie! Mam dla Ciebie tylko dobre wiadomości:</p> <p><b>Bezpośrednie zmiany</b></p> <p> @@ -136,16 +126,11 @@ Informacja o Twoim położeniu jest używana tylko do automatycznego szukania za Jak wspomniano, aplikacja komunikuje się bezpośrednio z infrastrukturą OSM. Konkretnie z <a href=\"http://wiki.openstreetmap.org/wiki/Overpass_API\">Overpass API</a> w celu pobrania zadań (anonimowo) oraz z <a href=\"http://wiki.openstreetmap.org/wiki/API_v0.6\">OSM API</a> w celu wysłania odpowiedzi.<br/> Niemniej przed każdym wysłaniem zmian aplikacja sprawdza <a href=\"https://www.westnordost.de/streetcomplete/banned_versions.txt\">prosty plik tekstowy</a> na moim serwerze, czy nie zabroniono jej wysyłania jakichkolwiek zmian. To zabezpieczenie pozwala wyłączać przestarzałe wersje aplikacji, w których znaleziono krytyczne błędy, mogące uszkodzić dane OSM.<br/> </p> -<p> -Żeby wyświetlać mapę, anonimowo pobierane są wektorowe kafelki z <a href=\"https://mapzen.com/projects/vector-tiles/\">serwisu Mapzen</a>. Serwis ten zapisuje żądania, by usprawnić dostęp do często odpytywanych miejsc poprzez ich wcześniejsze cache'owanie. Ich serwer zapisuje także adres IP, a wszystko to przechowuje Amazon, więc te dane im także podlegają. -</p> -<p> -(<i>To nie jest jeszcze zaimplementowane, chciałem tylko poinformować, że będzie!:</i>) Dane na tablicy wyników i w profilu są zebrane z publicznie dostępnych informacji na OpenStreetMap. Nie dotyczą one tylko tej aplikacji, ale całego wkładu użytkownika OSM. -</p>" +" "Włącz" "Tylko Wi-Fi" "Wyłącz" - "Jaką nawierzchnię ma ten kawałek drogi?" + "Jaką nawierzchnię ma ten fragment drogi?" "utwardzona (ogólnie)" "nieutwardzona (ogólnie)" "gruntowa (ogólnie)" @@ -163,8 +148,6 @@ Niemniej przed każdym wysłaniem zmian aplikacja sprawdza <a href=\"https:// "kostka" "drewniana" "Jak się nazywa to miejsce?" - - "Czy ta ulica ma chodnik?" "Mapa jest obrócona kierunkiem północnym w górę." "Tylko po stronie północnej" @@ -241,23 +224,15 @@ Udzielone odpowiedzi zostają potem umieszczone na OpenStreetMap w Twoim imieniu "Wyłącznie tych" "Ogólnego przeznaczenia" "Wybrałeś wiele sportów" - - "Czy przystanek %s posiada wiatę?" "Czy te toalety są płatne?" "Czy na tym przystanku są oznaczenia dla niewidomych na chodniku?" - - - "Czy to przejście ma oznaczenia dla niewidomych na chodniku?" + "Czy to przejście ma oznaczenia dla niewidomych na chodniku na każdym końcu?" "Na pewno sprawdzono to na miejscu?" - - "Czy przystanek %s ma oznaczenia dla niewidomych na chodniku?" "Należy wprowadzać tylko informacje, które zostały znalezione w terenie." "Czy ten parking dla rowerów jest zakryty (przed deszczem)?" "Nie pokazuj więcej w tej sesji" - - "Jaką nawierzchnię ma droga %s?" "Jaki jest znak ograniczenia prędkości na tej ulicy?" "To ograniczenie prędkości nie wygląda wiarygodnie." @@ -275,8 +250,6 @@ Jeśli na całej ulicy nie ma znaków dotyczących podświetlonej sekcji, obowi "Padel" "Sporty irlandzkie" "Siatkówka kopana" - - "Czy %s jest dostępne dla osób na wózku inwalidzkim?" "Częściowo" "Pamiętaj, że do większości zwykłych stojaków rowerowych można przypiąć rowery z obu stron." @@ -285,26 +258,14 @@ Jeśli na całej ulicy nie ma znaków dotyczących podświetlonej sekcji, obowi "Czy to zejście do metra jest dostępne dla osób na wózku?" "Czy ten przystanek kolejowy jest dostępny dla osób na wózku?" "Czy to miejsce jest dostępne dla osób na wózku?" - - "Czy przystanek %s jest dostępny dla osób na wózku?" - - "Czy zejście do metra %s jest dostępne dla osób na wózku?" - - "Czy przystanek kolejowy %s jest dostępny dla osób na wózku?" - - "Czy miejsce %s jest dostępne dla osób na wózku?" "Częściowo oznacza, że trzeba pokonać co najwyżej jeden stopień, aby wejść i większość pomieszczeń w środku jest dostępna dla osób na wózku." "Częściowo oznacza, że trzeba pokonać co najwyżej jeden stopień, aby wejść." - - "Są skróty w nazwie %s?" "Czy ta toaleta posiada przewijak dla niemowląt?" - - "Czy %s posiada przewijak dla niemowląt?" "Jakiego typu jest ten obiekt związany z odpadami?" "Punkt zbiórki" @@ -383,14 +344,8 @@ W przeciwnym wypadku możesz ściągnąć dodatkowe aplikacje klawiatury ze skle "Wanilię" "Orzechy włoskie" "Agawy sizalowe" - - "Czy ta część jest oświetlona?" - - "Czy %s jest oświetlona?" - - "Czy ta część drogi jest oświetlona?" "Wykrywa ruch" "Jest oświetlona 24 godziny na dobę." @@ -476,8 +431,6 @@ W przeciwnym wypadku możesz ściągnąć dodatkowe aplikacje klawiatury ze skle "Jest to droga polna lub leśna" "Żadne z powyższych, po prostu nie ma nazwy" "Czy te toalety są przystosowane dla osób niepełnosprawnych?" - - "Czy toalety %s są przystosowane dla osób niepełnosprawnych?" "Znak z wózkiem inwalidzkim jak ten może być widoczne, jeśli toalety są przystosowane. Oznacza to, że osoba na wózku jest w stanie z niej skorzystać, ale nie ma poręczy lub umywalki na odpowiedniej wysokości." @@ -492,21 +445,15 @@ Oznacza to, że osoba na wózku jest w stanie z niej skorzystać, ale nie ma por "metalowa" "Czy znajduje się tutaj ścieżka rowerowa? Jakiego typu?" "Jaka jest struktura tego mostu?" - - "Jakiego rodzaju połączenie internetowe oferuje %s?" "Wi-Fi" "Przewodowy (LAN)" "Komputer z dostępem do internetu" "Brak internetu" - - "Czy przystanek tramwajowy %s jest zadaszony?" "Czy ten przystanek tramwajowy jest zadaszony?" "Czy ta ławka ma oparcie?" "To stół piknikowy" - - "Jaka religia jest praktykowana w %s?" "Chrześcijaństwo" "Islam" @@ -531,8 +478,6 @@ Oznacza to, że osoba na wózku jest w stanie z niej skorzystać, ale nie ma por "Tylko dla klientów" "Jaka się nazywa ten deptak?" "Jaką nawierzchnię ma ten plac?" - - "Jaką nawierzchnię ma tutaj plac %s?" "Zależy od dnia i godziny" "Dodaj godziny" @@ -544,21 +489,42 @@ Oznacza to, że osoba na wózku jest w stanie z niej skorzystać, ale nie ma por "Ma wiele numerów domu" "Możesz wypisać wszystkie numery, oddzielając je przecinkami, lub podać ich zakres. Na przykład 1,3 lub 2-6." + "Barierka (przytrzymuje rame roweru)" + "Szeregowy (przytrzymuje tylko koło)" + "Szopa" + "Szafka" "Budynek" + "Jaki rodzaj stojaków rowerowych ma ten parking rowerowy?" + "W jakich godzinach ta skrzynka pocztowa jest opróżniania?" + "Dodaj godzinę odbioru" + "Godziny nie są podane" "Czy ta droga jest ukończona?" "Czy ta droga rowerowa jest ukończona?" "Czy ten chodnik jest ukończony?" "Czy ta droga jest ukończona?" "Czy ten budynek jest ukończony?" + "Wyłączone w %s" + "Jaki jest rodzaj znaku ograniczenia prędkości dla %s?" "Jaki rodzaj nawierzchni posiadają te schody?" - "Jaką nawierzchnię ma ta ścieżka?" + "Jaką nawierzchnię ma ten fragment ścieżki?" + "Jaką nawierzchnię ma ten fragment ścieżki?" + "Wybierz najbardziej szczegółowy który pasuje:" + "Czy jesteś pewien, że nie da się określić bardziej szczegółowo?" + "Nie (pozostaw notatkę)" + "Jaki rodzaj budynku był tutaj budowany?" + "Ma różne zastosowania" + "Wybierz główne przeznaczenie budynku. Np. jeżeli na parterze bloku znajdują się sklepy, w dalszym ciągu jest on budynkiem mieszkalnym." + "Nadal jest w budowie" "Mieszkalny" + "budynek gdzie mieszkają ludzie" "Dom" "Dom jednorodzinny" + "budynek dla wielu rodzin, może mieć sklepy na parterze" "Dom jednorodzinny" "wolnostojący dom jednorodzinny" "Bliźniak" "dwa połączone domy jednorodzinne" + "Szeregowiec" "Hotel" "Akademik" "Dom parterowy" @@ -566,21 +532,27 @@ Na przykład 1,3 lub 2-6." "Biurowiec" "Magazyn" "Kiosk" + "Zbiornik" "Budynek religijny" "Kościół" "Kaplica" "Katedra" "Meczet" "Świątynia" + "Pagoda" "Synagoga" "Przedszkole" + "Szkoła" "Szpital" "Stadion" "Stacja kolejowa" "Uniwersytet" "Budynek rządowy" + "Dla samochodów" + "zadaszenie dla samochodu" "Garaż" "Garaże" + "Parking" "Budynek gospodarczy" "Szklarnia" "Inny" @@ -589,4 +561,5 @@ Na przykład 1,3 lub 2-6." "Dach" "Hangar" "Bunkier" + "Nie ma numeru" diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 0149a5e881..a1a8d64307 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -80,13 +80,9 @@ "Licença" "GNU General Public License" "Você está desconectado" - - - "Você precisa entrar com sua conta OSM para aplicar suas respostas. Entrar agora?" + "Você precisa autorizar com sua conta OSM para publicar suas respostas. Autorizar agora?" "Não autorizado" - - - "Esta versão do StreetComplete foi proibida de carregar qualquer resposta! Atualize sua versão!" + "Esta versão do StreetComplete é muito antiga. Por favor atualize!" "Para escanear por missões em torno de você automaticamente, ative a localização" "Sem novas missões disponíveis" "Mais tarde" @@ -166,9 +162,7 @@ Para exibir o mapa, os blocos vetoriais são recuperadas do <a href=\"https:/ "Paralelepipedo" "Madeira" "Qual o nome deste lugar?" - - - "Há uma calçada nesta rua?" + "Essa rua tem alguma calçada?" "O mapa está orientado para o norte." "Apenas no lado norte" "Apenas no lado sul" @@ -247,19 +241,13 @@ As informações inseridas são adicionadas diretamente ao OpenStreetMap em seu "O ponto de ônibus %s tem abrigo?" "Esses sanitários são pagos?" "Essa parada de ônibus tem pavimentos táteis?" - - "Essa faixa de pedestres tem pavimentos táteis nos dois lados?" "Tem a certeza que verificou isto no local?" - - "A parada de ônibus \"%S\" tem pavimentos táteis?" "Apenas informação que foi feita durante um levantamento deve ser adicionada." "Essa parada de bicicleta é coberta (protegida da chuva)?" "Não mostrar de novo nesta sessão" - - - "Que tipo de pavimento possui a estrada %s aqui?" + "Que tipo de pavimento a estrada %s tem aqui?" "Qual a placa de limite de velocidade para essa rua?" "Esse limite de velocidade parece errado." "Tem certeza de que não há nenhum limite sinalizado?" @@ -276,8 +264,6 @@ Se não há placas ao longo de toda a rua que corresponda com a parte destacada "Pádel" "Jogos Gaélicos" "Futevôlei" - - "%s é acessível por cadeiras de rodas?" "Parcial" "Note que a maioria dos suportes podem ser utilizados para estacionar uma bicicleta de cada lado." @@ -286,26 +272,14 @@ Se não há placas ao longo de toda a rua que corresponda com a parte destacada "Esta entrada de metrô é acessível por cadeiras de rodas?" "Esta estação de trem é acessível por cadeiras de rodas?" "Este local é acessível por cadeiras de rodas?" - - "A parada de ônibus %s é acessível por cadeiras de rodas?" - - "A entrada de metrô %s é acessível por cadeiras de rodas?" - - "A estação de trem %s é acessível por cadeiras de rodas?" - - "O local %s é acessível por cadeiras de rodas?" "Parcial significa que não mais que uma etapa a necessária para acessar o negócio, e que a maioria das salas internas é acessível para cadeiras de rodas." "Parcial significa que não mais que uma etapa a necessária para acessar." - - "Abreviação no nome %s?" "Este sanitário tem trocador para bebê?" - - "%s tem trocador para bebê?" "Que tipo de instalação de reciclagem é esta?" "Centro" @@ -317,9 +291,7 @@ Se não há placas ao longo de toda a rua que corresponda com a parte destacada "Não é possível introduzir os caracteres da placa" "Falta o layout do teclado?" "Abrir opções" - - - "Abrir na loja" + "Visitar a loja de aplicativos" "Se usa o teclado padrão, é provável que simplesmente tenha de configurar o layout do teclado, nas opções de métodos de entrada, para o idioma que necessita. Caso contrário, pode baixar outro teclado na loja de aplicativos. Alguns dos teclados mais populares e que suportam vários idiomas são o Google Gboard, SwiftKey Keyboard e Multiling O Keyboard." @@ -386,15 +358,9 @@ Caso contrário, pode baixar outro teclado na loja de aplicativos. Alguns dos te "Baunilha" "Nozes" "Sisal" - - - "Este trecho de caminho tem iluminação?" - - - "%s tem iluminação aqui?" - - - "Este trecho de estrada tem iluminação?" + "Este trecho de caminho é iluminado?" + "%s é iluminado aqui?" + "Este trecho de estrada é iluminado?" "Usa detector de movimento " "É iluminado dia e noite" "Conta autorizada: %s" @@ -483,9 +449,7 @@ Caso contrário, pode baixar outro teclado na loja de aplicativos. Alguns dos te "É uma estrada agrícola ou florestal" "Nenhuma das opções, simplesmente não há nome" "São esses banheiros acessíveis por cadeira de rodas?" - - - "Os banheiros %s são acessiveis por cadeira de rodas?" + "O banheiro %s é acessível por cadeira de rodas?" "Um simbolo de cadeirante como esse deve estar visível se os banheiros são acessíveis. Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barras ou adaptações não estão presentes." "Criar uma nova nota" @@ -501,7 +465,7 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "Qual a estrutura dessa ponte?" - "Que tipo de conexão à Internet é oferecida por %s?" + "Que tipo de conexão à Internet %s oferece?" "Wi-Fi" "Cabeada (LAN)" "Computador com acesso à Internet" @@ -675,8 +639,6 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "Bunker" "Não tem número" "Esse prédio foi marcado como:" - - "Isso está correto e não é apenas parte de outro prédio?" - "Esta versão do StreetComplete foi impedida de adicionar qualquer resposta! Atualize esta app!" + "Esta versão do StreetComplete é muito antiga. Favor atualizar!" "Para procurar desafios automaticamente, ative a sua localização" "Não existem mais desafios disponíveis" "Mais tarde" @@ -555,6 +555,7 @@ Caso contrário, pode descarregar outro teclado na loja de apps. Alguns dos tecl "Qual a superfície deste trilho? " "Selecione o que mais se ajusta:" "Tem a certeza que não consegue determinar de forma precisa?" + "<p>Para alguns desafios, são descarregados dados de terceiros. Em particular, o desafio de sentido único faz consultas a uma API, também alojada em westnordost.de, sobre candidatos possíveis de sentido único.</p>" "Não (deixar nota)" "Este edifício foi construído com que intuito?" "Por favor selecione um valor mais específico" diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b204302af3..786e3fefc7 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -481,8 +481,10 @@ "Это полевая или лесная дорога" "Ничего из выше перечисленных, просто у неё нет названия." "Эти туалеты доступны для инвалидных колясок." + "Туалет %s доступен для инвалидной коляски?" "Создать новую заметку" "Увеличьте масштаб для создания заметки" + "Оставьте заметку, чтобы указать картографами на ошибку в этом месте. Отрегулируйте позицию заметки на карте:" "Перезаписать кеш квестов" "Полезно, если думаете что некоторые квесты устарели" "Перезаписать" @@ -492,6 +494,7 @@ "Какая структура моста?" "Какой тип интернет соединения предлагается в %s?" "Wi-Fi" + "Проводной (LAN)" "Компьютер с доступом в интернет" "Нет соединения" "Есть ли у этой скамейки спинка?" @@ -506,11 +509,15 @@ "Синто" "Иудаизм" "Даосизм" + "для использования любой религией" "Сикхизм" "Джайнизм" "Каодай" + "Китайская народная религия" "Какой религии храм?" "Есть плата за парковку?" + "велосипедная полоса (пунктирная разметка)" + "Необработанный булыжник" "Имеются ли здесь ограничения на парковку?" @@ -521,12 +528,17 @@ "Какой тип покрытия у этой площади?" + "Какая поверхность у площади %s?" "Зависит от времени суток и дня" + "Добавьте время" "Да, но только если" "Да, но нет..." "в такие часы:" "Какое название у автобусной остановки?" "Какое название у трамвайной остановки?" + "У строения несколько номеров" + "Введите диапазон или несколько значений, разделенных запятой. +Например: 1,3 или 2-6." "Огороженный навес" "Запирающиеся отсеки" "Здание" @@ -539,6 +551,10 @@ "Работы на пешеходной дорожке завершены?" "Дорожные работы завершены?" "Работы в здании завершены?" + "Не показывать в %s" + "В этой зоне отдыха есть туалеты?" + "Какое ограничение скорости для %s?" + "Нет (оставьте заметку)" "Пожалуйста, выберите более конкретное значение" "Многоцелевое здание" "Просто выберите основное назначение здания. Например, если есть магазин на первом этаже с квартирами над над ним, то всё равно это многоквартирный дом." @@ -556,6 +572,7 @@ "для проживания двух семей" "Гостиница" "Общежитие" + "Бунгало" "Передвижной дом" "Коммерческая недвижимость" "здание где работают люди, магазины или любая другая коммерческая недвижимость" @@ -581,6 +598,7 @@ "Ж/д вокзал" "Здание общественного транспорта" "Университет" + "Здание правительства" "Автостоянка с навесом" "навес для защиты автомобиля" "Отдельностоящий гараж" @@ -599,4 +617,6 @@ "Ангар" "используется для содержания в нём самолётов, вертолётов и других летательных аппаратов" "Бункер" + "Нет номера дома" + "Строению были добавлены теги:" diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index ae619c62e7..8867af03da 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,16 +1,16 @@ "Inställningar" - "Ingen åtkomst till servern för auktorisering" + "Ingen åtkomst till servern för godkännande" "Laddar" "På nytt" - "Auktorisering avbruten" - "Auktoriseringen misslyckades: alla uppmärkta behörigheter måste anges" + "Godkännandet avbrutet" + "Godkännandet misslyckades: alla uppmärkta behörigheter måste anges" "Inställingar" "Kommunikation" "Visa" "Ge tillgång till OSM" - "Du är ännu inte auktoriserad" + "Du är ännu inte godkänd" "%d MB" "Utrymme i megabyte som reserveras på yttre lagring för att cacha kartdelar" "Visa alla anteckningar" @@ -23,15 +23,15 @@ "Andra svar…" "Svårt att säga" "Är du säker?" - "Javisst" + "Ja, jag är säker" "Jag måste kolla" "Du lämnade fältet tomt" - "Lämna en anteckning i stället?" - "Du har möjlighet att lämna en offentlig anteckning på kartpunkten som andra kartläggare kan kommentera och förhoppningsvis avgöra:" + "Vill du lämna en anteckning i stället?" + "Du har möjlighet att lämna en offentlig anteckning på platsen som andra kartläggare kan kommentera och förhoppningsvis lösa problemet." "OK" "Nej, göm bara" "Vad heter vägen?" - "så som det står på vägskylten, skriv gärna ut förkortningar:" + "som det står på vägskylten, skriv gärna ut förkortningar:" "I bland finns det en gatuskylt bara i ena ändan av gatan. Märk även att det kanske inte finns separata gatuskyltar för sidovägar som hör till en större gata. Vanligtvis har en gata med villabebyggelse ett namn." "Om namnet kan skrivas utan förkortningen, ska det skrivas så. Många vanliga förkortningar skrivs ut automatiskt medan du skriver, men troligen inte alla." "Ingen förkortning" @@ -52,20 +52,20 @@ "%1$s återaktiverad notering (%2$s)" "Anonym" "Svar" - "Kassera svar?" - "Kassera" + "Släng svar?" + "Släng" "Ångra" "Sök efter uppdrag här" "Ladda upp svar" "Du lämnade formuläret tomt" "stäng" - "Fel vid scanning för uppdrag" + "Fel vid sök efter uppdrag" "Fel vid uppladdning svar" "Zooma in ytterligare" - "Avbryta den aktuella sökningen och skanna här i stället?" + "Avbryta den aktuella sökningen och sök här i stället?" "Söker efter uppdrag…" "Söker efter fler uppdrag…" - "Lokalisering är avstängd. Öppna inställningar för att slå på det nu?" + "Positionshämtning är avstängd. Öppna inställningar för att slå på det nu?" "Din plats är nödvändigt för att söka efter uppdrag i din närhet." "Om StreetComplete" "Version" @@ -82,11 +82,11 @@ "Du är offline" - "Du måste auktorisera med ditt OSM-konto för att publicera dina svar. Auktorisera nu?" + "Du måste ge programmet tillåtselse att använda ditt OpenStreetMap-konto för att publicera dina svar. Vill du ge tillåtelse nu?" "Inte godkänd" "Denna version av StreetComplete har förbjudits från att överföra några svar! Vänligen uppdatera din version!" "För att söka efter uppdrag runt omkring dig automatiskt, slå på plats" - "Inga ytterligare uppdrag tillgängliga" + "Det finns inga fler uppdrag här" "Senare" "den bara förbinder två vägar" "Något annat (lämna notering)" @@ -96,14 +96,14 @@ "Allmänna helgdagar" - "Ingen stängningstid" + "Ingen fast stängningstid" "Öppet dygnet runt" - "Beror på vilken månad" + "Varierar från månad till månad" "Inga regelbundna öppettider" "Beskriv öppettider" - "Var kortfattad, använd helst formuleringen från skylten. Ex. \"enligt överenskommelse\". Avsaknaden av en skylt betyder inte nödvändigtvis att det inte finns några ordinarie öppettider." + "Var kortfattad, använd helst formuleringen från skylten. Ex. \"enligt överenskommelse\". Avsaknaden av en skylt betyder inte nödvändigtvis att det inte finns några fasta öppettider." "Hur många våningar har den här byggnaden?" - "Hur många våningar har denna byggnad del?" + "Hur många våningar har denna byggnadsdel?" "Vilken form har byggnadens tak?" "Välj en:" "Visa mer…" @@ -148,15 +148,15 @@ För att visa på kartan, är vektor brickor hämtas från <a href=\"https:// "Obelagd (generiska)" "Mark (generiska)" "Asfalt" - "Komprimerad" + "Sammanpressad sten" "Betong" - "Smuts" + "Jord" "Fint grus" "Gräs" - "Dagvattensuppsamling" + "Dagvattenuppsamling" "Grus" "Gatsten" - "Grus" + "Småsten" "Sand" "Kullersten" "Trä" @@ -176,40 +176,40 @@ För att visa på kartan, är vektor brickor hämtas från <a href=\"https:// "Vilken typ av serviceväg är detta?" - "Hur många banor har denna väg?" + "Hur många körfält har denna väg?" - "Om det inte finns några vägmarkeringar, har det inte körfält." + "Om vägen saknar mittlinje har det inte några körfält." "leder norrut" "leder västerut" "leder österut" "leder söderut" "Den har inga markerade körfält" - "Vänligen uppskatta hur många bilar som skulle få plats bredvid varandra på den här vägen." + "Försök att uppskatta hur många bilar som skulle få plats bredvid varandra på den här vägen." "Är det här en enkelriktad gata?" - "Vad är har den här byggnaden för husnummer?" - "App för komplettering av OpenStreetMap" + "Vad har den här byggnaden för husnummer?" + "Kartläggninsapp för OpenStreetMap" "Bidra till att förbättra OpenStreetMap med StreetComplete! Appen hittar ofullständiga uppgifter i din närhet och visar dem på en karta som markörer. Var och en av dessa går att lösa på plats genom att besvara en enkel fråga. Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, utan att du behöver använda en annan redigerare." "Den har inget namn" - "Verkligen inget namn?" - "Ja, inget namn" + "Är du säker på att den saknar namn?" + "Ja, den saknar namn" "Lägg till öppettider" "Vill du skicka felrapporten till utvecklaren?" "Åh nej, StreetComplete kraschade förra gången!" "komponera e-post" "Du har ingen e-postklient installerad." - "Hur många cyklar kan parkeras här?" - "Detta husnummer ser väldigt konstigt ut." - "För vilka sporter är denna planen för?" + "Behåll skärmen på" + "Uppkopplingsfel vid sök efter uppdrag. Försök igen senare." + "Uppkopplingsfel vid uppladdning av svar. Försök igen senare." "Ja" "Nej" "Har den här hållplatsen en busskur?" "Hur många cyklar kan parkeras här?" - "Husnumret ser ovanligt ut." + "Det här husnumret ser väldigt ovanligt ut." "Vilken sport utförs här?" "Ingen specifik sport" "Fotboll" @@ -217,7 +217,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Baseball" "Basket" "Golf" - "Ridning" + "Hästsport" "Friidrott" "Volleyboll" "Beachvolleyboll" @@ -227,7 +227,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Boule" "Skytte" "Kricket" - "Bord tennis" + "Bordtennis" "Gymnastik" "Bågskytte" "Australisk fotboll" @@ -235,7 +235,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Kanadensisk fotboll" "Landhockey" "Handboll" - "Is hockey" + "Ishockey" "Nätboll" "Rugby" "Välj:" @@ -246,7 +246,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Har hållplatsen %s en busskur?" - "Är de här toaletterna avgiftsbelagda?" + "Kostar det något att använda toaletten?" "Har busshållplatsen taktil beläggning?" @@ -255,18 +255,18 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Har busshållplatsen %s taktil beläggning?" - "Enbart information som har bekräftats på plats ska skickas in." - "Är den här cykelparkeringen skyddad (från regn)?" + "Lägg bara in information som du har observerat på plats." + "Är det tak över den här cykelparkeringen?" "Visa inte igen under den här sessionen." "Vad har %s för underlag här?" "Vad står det på hastighetskylten?" - "Den här hastighetsbegränsningen verkar osannolik." + "Hastighetsbegränsningen verkar osannolik." "Är du säker att det inte finns någon skylt?" "Kontrollerade du i början och slutet av vägen? Om det inte finns några skyltar längs hela vägen som gäller för den markerade sektionen kommer rekommenderad hastighet att läggas till." - "Ja, ingen skylt" - "Vägar i tätbebyggt område har annan bashastighet än landsvägar." + "Ja, det finns inte någon skylt" + "Det är olika bashastighet i tätbebyggt område och på landsvägar (50 och 70 km/h i Sverige)." "Tätbebyggt område" "Landsväg" "Om det finns en skylt som ser ut så här vid huvudvägen kommer det inte finnas individuella skyltar inom zonen då hastighetsbegränsningen gäller för hela zonen." @@ -280,7 +280,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Är %s tillgänglig med rullstol?" "Delvis" - "Notera att de flesta cykelställ kan användas från två håll för att parkera på vardera sida." + "Notera att de flesta cykelställ kan användas från båda håll, med en cykel på vardera sida." "Rullskridskor" "Är busstationen tillgänglig med rullstol?" "Är tunnelbaneingången tillgänglig med rullstol?" @@ -302,7 +302,7 @@ Den information du anger skickas sedan direkt till OpenStreetMap i ditt namn, ut "Delvis innebär att det inte finns mer än ett enda steg för att komma åt det." - "Förkortning i namnet %s?" + "Är det en förkortning i namnet %s?" "Har den här toaletten ett skötbord?" @@ -325,12 +325,12 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Vilken typ av brandpost är det här?" "Pelare" "Underjordisk" - "Vägg" + "Väggmonterat" "Damm" "Se <a href=\"https://github.com/westnordost/StreetComplete/graphs/contributors\">hela listan på GitHub</a>." "Titta på <a href=\"https://poeditor.com/projects/view?id=97843\">projekt POEditor</a> för en fullständig lista." "Översättningar" - "Kod Bidragsgivare" + "Kodbidrag" "Författare och underhållare" "och mer ..." "Det är gångfartsområde" @@ -395,11 +395,11 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Har den här delen av vägen belysning?" "Den använder rörelsedetektion" "Det är belyst dygnet runt." - "Auktoriserat konto: %s" + "Godkänt konto: %s" "Kan inte söka här. Försök att zooma in ytterligare eller minska kartans lutning." "Vilken typ av övergångsställe är det här?" "Övergångsställe med trafikljus" - "Obevakat övergångsställe" + "Övergångsställe utan trafikljus" "Övergångsställe utan vägmarkeringar" "N" "Ångra" @@ -412,24 +412,24 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Paranötter" "Tungnötter" "Vilken typ av parkering är det här?" - "Normal" - "Underjordiskt garage" + "Parkeringsplats" + "Underjordisk parkering" "Parkeringshus" - "Har %s en toalett?" - "Vilket material är den här ledningsstolpen gjord av?" + "Finns det en toalett på %s?" + "Vad är den här ledningsstolpen gjord av?" "Trä" "Stål" "Betong" "Enbart rekommenderad hastighet" - "Inget nummer men ett namn" + "Inget husnummer men ett namn" "Husnamn:" "takvåningar" "vanliga våningar (räknar inte takvåningar)" - "Auktoriserad" + "Godkänd" "varierar mellan olika husdelar" "I sådana fall, fyll i värdet för den högsta husdelen" "Klicka för att lossa fixerad vy" - "Logga in med din webbläsare för att auktorisera." + "Logga in med din webbläsare för att ge programmet tillåtelse" "Är körbanorna fysiskt separerade (till exempel genom en barriär)? Bashastigheten beror på om så är fallet eller inte." "Feedback" "Bifoga foto" @@ -438,9 +438,9 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "separat cykelbana" "cykelfil" "ingen" - "fil uttryckligen delad med annan trafik" - "i bussfil" - "uttryckligen delad trottoar" + "cykelfil delad med annan trafik" + "cykel- och kollektivfil" + "gång- och cykelbana" "Fel vid skapandet av foto" "cykelfil, båda riktningarna" "separat cykelbana, båda riktningarna" @@ -458,13 +458,16 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Enbart" "Veganska rätter innehåller inga animaliska produkter (inget kött, inga mjölkprodukter, inga ägg, ...). " "Vegetariska rätter innehåller inget kött." - "Svara enbart ja om platsen erbjuder vettiga måltidsalternativ för den här kosten. Ignorera förrätter osv." + "Svara enbart ja om platsen erbjuder fullvärdiga måltidsalternativ för den här dieten - inte till exempel enbart förrätter." "Vilken typ av biltvätt är det här?" "Automatisk" "Självservice" "Anställda tvättar bilen" "Aktivera det här uppdraget? " "Frågan är avaktiverad i utgångsläget då du troligtvis behöver gå inomhus för att svara på frågor av den här typen." + "Konskriptionsnummer" + "Orienteringsnummer (valfritt)" + "Du behöver uppge konskriptionsnummer" "Även cykelbana på andra sidan" "Du behöver fylla i båda sidorna" "Beskriv vad som står på skylten. Saknas skylt, fråga om öppettiderna." @@ -475,9 +478,14 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Inget av ovanstående, den har helt enkelt inget namn" "Är de här toaletterna tillgängliga med rullstol?" "Är toaletterna %s tillgängliga med rullstol?" + "Om toaletten är tillgänglig för rullstolsanvändare finns det oftast en sådan skylt. Delvis betyder att rullstolsanvändare kan komma in och använda toaletten men att det inte finns stödhandtag eller anpassad tvättho." "Skapa en ny anteckning" "Zooma in ytterligare för att skapa en anteckning" - "Du har möjlighet att lämna en offentlig anteckning på kartpunkten som andra kartläggare kan kommentera och förhoppningsvis avgöra. Justera anteckningens position genom att flytta kartan." + "Du har möjlighet att lämna en offentlig anteckning på platsen som andra kartläggare kan kommentera och förhoppningsvis avgöra. Justera anteckningens position genom att flytta kartan." + "Töm cache för uppdrag" + "Användbart om du misstänker att några av uppdragen är gamla" + "Töm" + "Om du tömmer cachen för uppdrag kommer uppdragen att uppdateras nästa gång du laddar ner dem. Cachen töms automatiskt efter en vecka eller om ett uppdrag du har löst redan visar sig vara löst av någon annan." "Ser vanligtvis ut så här:" "Metall" "Finns det en cykelväg här? Vilken typ?" @@ -490,7 +498,7 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Har spårvagnshållplatsen %s ett regnskydd?" "Har den här spårvagnshållplatsen ett regnskydd?" "Har den här bänken ett ryggstöd?" - "Det är ett picnickbord" + "Det är ett picknickbord" "Vilken religion praktiseras vid %s?" @@ -508,7 +516,7 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Cao Ðài" "Kinesisk folkreligion" "Vilken religion praktiseras vid den här helgedomen?" - "Är parkeringen avgiftsbelagd?" + "Kostar det något att parkera här?" "cykelfil (streckad markering)" "Ohuggen kullersten " "Är det reglerat vem som får parkera här?" @@ -528,13 +536,14 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Vad heter den här busshållplatsen?" "Vad heter den här spårvagnshållplatsen?" "Den har flera husnummer" - "Du kan fylla i husnummer separerade med komman eller i serier. Till exempel 1,3 eller 2-6. " + "Du kan fylla i husnummer separerade med komman eller i intervall separerade med bindesträck. Till exempel 1,3 eller 2-6. " "Ställ" "Framhjulsställ" "Skjul" "Skåp" "Byggnad" "Vilken typ av cykelparkering är det här?" + "cykelfil (uppmaning)" "Vad har den här brevlådan för tömningstider?" "Lägg till tömningstid" "Tömningstid är inte specificerad" @@ -548,41 +557,44 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Vad står det på hastighetsskylten längs %s?" "Vilket underlag har den här trappan här?" "Vilket underlag har den här ridvägen här?" - "Vilket underlag har den här stigen här?" + "Vilket underlag har den här vägen här?" "Välj den mest specifika som passar:" "Är du säker på att du inte kan svara mer specifikt?" + "<p>För att visa kartan hämtas vektorkartor från <a href=\"https://tiles.map-data.de\">map-data.de</a>. Tjänsten loggar begäran av kartan för anonym statistik och för att hitta eventuella fel, men tar bort loggarna efter några dagar. </p>" + "<p>För några uppdrag kommer tilläggsdata från tredje part att laddas ned. Sökningen efter uppdrag om enkelriktade gator använder ett API på westnordost.de för att hitta kandidater för enkelriktad körning.</p>" "Nej (lämna anteckning)" + "Vill du nollställa både uppdrag och ordningsföljd?" "Vad uppfördes den här byggnaden som?" "Var god lämna ett mer specifikt svar" "Den har flera ändamål" - "Välj huvudändamålet för den här byggnaden. T.ex om det finns en affär på bottenvåningen med lägenheter ovanför sig är det fortsatt i huvudsak ändå en lägenhetsbyggnad." + "Välj huvudändamålet för den här byggnaden. T.ex om det finns en affär på bottenvåningen med lägenheter ovanför sig är det fortsatt i huvudsak ändå ett flerbostadshus." "Den är fortfarande under konstruktion" "Bostad" "byggnad där människor bor" "Hus" "enfamiljshus" - "flerfamiljshus, kan ha affärer på bottenvåningen" - "Lägenheter" - "Fristående hus" + "lägenheter, kan ha affärer på bottenvåningen" + "Flerbostadshus" + "Villa" "fristående enfamiljshus" "Parhus" - "par av två enfamiljshus" + "ett hus delat i två, för två familjer" "Radhus/kedjehus" - "en rad av liknande enfamiljshus" + "en rad av liknande hus tätt inpå varandra" "Hotellbyggnad" - "Studenthem" + "Studenthem/internat" "Husbåt" "Bungalow" "litet fristående hus, ofta med veranda (sommarstuga eller liknande)" "Stående husvagn" "Kommersiell byggnad" - "byggnad där människor arbetar, handlar eller gör andra kommersiella aktiviteter" - "Industriell byggnad" + "byggnad där människor arbetar, handlar eller driver annan näringsverksamhet" + "Industribyggnad" "t.ex en fabrik, verkstad, bilverkstad, ..." "Kontorsbyggnad" "Affär(er)" "Lagerbyggnad" - "Kiosk" + "Fristående kiosk" "Lagringstank" "Religiös byggnad" "Kyrka" @@ -611,14 +623,14 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Garage för en bil" "Flera garage" "Parkeringshus" - "På en gård" + "På en bondgård" "Manbyggnad" - "den byggnad man bor i på en gård" + "den byggnad man bor i på en bondgård" "Ekonomibyggnad" "byggnad på en bondgård som inte är bostadshus" "Växthus" "Annat" - "Skjul" + "Skjul/förråd" "Hydda" "liten, enkel bostad eller skydd" "Tak" @@ -627,5 +639,8 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Hangar" "stor byggnad för flygplan, helikoptrar eller rymdfarkoster" "Bunker" + "Den har inget husnummer" + "Byggnaden är definierad som:" + "Är det korrekt och det är inte enbart en del av en byggnad?" "Helgedom" From 11d39641d6f82767abe922233d452db96bb25113 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sun, 1 Jul 2018 12:45:33 +0200 Subject: [PATCH 07/29] pull translations --- app/src/main/res/values-da/strings.xml | 45 ++++++++++++++++------ app/src/main/res/values-el/strings.xml | 14 +++---- app/src/main/res/values-fr/strings.xml | 25 ++---------- app/src/main/res/values-pt-rBR/strings.xml | 29 +++++++------- app/src/main/res/values-sv/strings.xml | 4 +- 5 files changed, 62 insertions(+), 55 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 8a10872c4d..b554fed915 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -37,8 +37,6 @@ "Nogle gange er vejskiltet kun på den ene side af gaden. Bemærk også at der måske ikke er et ekstra vejskilt for sidegader der tilhører en større gade. For det meste har alle gader med huse et navn." "Hvis navnet kan skrives uden en forkortelse bør den det. Mange typiske forkortelser er udvidede automatisk mens to skriver, men ikke alle." "Ingen forkortelse" - - "Hvad er åbningstiderne for %s?" "åbningstid" "lukketid" @@ -61,9 +59,7 @@ "Afbryd" "Skan efter opgaver her" "Upload svar" - - - "Du efterlod formularen tom" + "Du gav ikke noget svar" "luk" "Fejl mens der blev skannet for opgaver" "Fejl mens der blev uploadet svar" @@ -86,13 +82,9 @@ "Licens" "GNU General Public License" "Du er offline" - - - "Du er nød til at autentificere med din OSM konto for at faktisk sende dine svar. Autentificer nu?" + "Du er nød til at autentificere med din OSM konto for at publicere dine svar. Autentificer nu?" "Ikke autentificeret" - - - "Denne version af StreetComplete må ikke indsende svar! Opdater din version!" + "Denne version af StreetComplete er for gammel! Opdater venligst!" "For at skanne efter opgaver tæt på dig skal du tænde Lokation." "Der er ikke flere opgaver tilgængelige" "Senere" @@ -571,4 +563,35 @@ F.eks. 1,3 eller 2-6." "Hvilket overflade har denne sti her?" "Vælg den mest specifikke der passer:" "Er du sikker på at du ikke kan bestemme den mere specifikt?" + "<p>For at vise kortet hentes vektor fliser fra <a href=\"https://tiles.map-data.de\">map-data.de</a>. Servicen logger flise hentninger til anonym statistik og at opdage problemer, men sletter loggen efter et par dage</p>" + + + "<p>Nogle opgaver har brug for at hente ekstra data fra tredjeparter. Specielt bruger envejs opgaven en API, også på westnordost.de, for mulige envejs kandidater.</p>" + "Nej (efterlad note)" + "Nulstil både opgaver indstillinger og rækkefølge til standard?" + "Hvad blev denne bygning bygget som?" + "Vælg venligt en mere specifik værdi." + "Den har adskillelige formål" + "Vælg hovedformålet med bygningen. F.eks. hvis der er en forretning i stueetagen med lejligheder ovenpå, så er det stadig en lejlighedsbygning." + "Den er stadig ved at bygges" + "Bopæl" + "en bygning hvor folk bor" + "Hus" + "enkeltfamilies hjem" + "hus med flere familier, kan have forretninger i stueetagen" + "Lejlighedsbygning" + "Adskilt hus" + "fritstående enfamiliehus" + "Parcelhus" + "par af enfamiliehuse" + "Rækkehuse" + "en lineær række af lignende enfamiliehuse" + "Hotelbygning" + "Kollegium" + "Husbåd" + "Bungalow" + + + "lille fritstående hus (sommerhus, feriehytte...)" + "Campingvogn (semi-permanent)" diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a1bdc3e77b..bcbeea9f5a 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -407,7 +407,7 @@ "Ενεργοποιήθηκε" "Τύπος αναζήτησης" "Επαναφορά" - "Πατήστε παρατεταμένα και μετακινήστε μια αναζήτηση για επαναίτηση της προτεραιότητας για λήψη και εμφάνιση στο χάρτη." + "Πατήστε παρατεταμένα και μετακινήστε μια αναζήτηση για επαρύθμιση της προτεραιότητας λήψης και εμφάνιση στο χάρτη." " Αναίρεση" "Ακύρωση" @@ -461,7 +461,7 @@ "Αυτή η στάση του τραμ έχει σκέπαστρο;" "Ο πάγκος έχει πλάτη;" "Είναι ένα τραπέζι πικνίκ" - "Ποια θρησκεία ασκείται στο %s;" + "Ποια θρησκεία ασκείται στην %s;" "Χριστιανισμός" "Ισλαμισμός" "Ινδουισμός" @@ -477,10 +477,10 @@ Caodaism" "Κινεζική λαϊκή θρησκεία" "Ποια θρησκεία εκπροσωπείται σε αυτό το ιερό;" - "Κοστίζει κάποια αμοιβή το παρκάρισμα εδώ;" + "Κοστίζει κάποια χρέωση το παρκάρισμα εδώ;" "λωρίδα ποδηλάτου (διακεκομμένη σήμανση)" "Αδιαμόρφωτο λιθόστρωτο" - "Είναι περιορισμένο ποιος μπορεί να σταθμεύσει εδώ;" + "Υπάρχει περιορισμός στο ποιος μπορεί να σταθμεύσει εδώ;" "Είναι ιδιωτικό" "Είναι δημόσιο (με ή χωρίς χρέωση)" "Είναι μόνο για τους πελάτες" @@ -506,17 +506,17 @@ "Ποιες είναι οι ώρες συλλογής αυτού του γραμματοκιβωτίου;" "Προσθέστε ώρα συλλογής" "Δεν έχουν οριστεί ώρες" - "Είναι αυτός ο δρόμος ολοκληρωμένος;" + "Είναι ολοκληρωμένος αυτός ο δρόμος;" "Είναι αυτός ο ποδηλατόδρομος ολοκληρωμένος;" "Είναι αυτός ο πεζόδρομος ολοκληρωμένος;" "Είναι αυτή η διαδρομή ολοκληρωμένη;" "Είναι αυτό το κτίριο ολοκληρωμένο;" - "Δεν εμφανίζεται ποτέ στο %s" + "Δεν εμφανίζεται ποτέ στην %s" "Αυτή η περιοχή ξεκούρασης έχει τουαλέτα;" "Ποιό είναι το ορίο ταχύτητας στην πινακίδα για την %s;" "Τι επιφάνεια έχουν αυτά τα σκαλοπάτια εδώ;" "Τι επιφάνεια έχει αυτή η διαδρομή ιππασίας εδώ;" - "Τι επιφάνεια έχοει αυτό το μονοπάτι εδώ;" + "Τι επιφάνεια έχει αυτό το μονοπάτι εδώ;" "Επιλέξτε το πιο συγκεκριμένο που ταιριάζει:" "Είστε σίγουροι ότι δεν μπορείτε να το προσδιορίσετε πιο συγκεκριμένα;" "<p>Για να εμφανιστεί ο χάρτης, τα διανυσματικά πλακίδια ανακτώνται από το <a href=\"https://tiles.map-data.de\">map-data.de</a>. Η υπηρεσία καταγράφει τα αιτήματα πλακιδίων για ανώνυμα στατιστικά στοιχεία και για την ανίχνευση ζητημάτων, αλλά διαγράφει τις καταγραφές μετά από μερικές ημέρες.</p>" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d11dfc370d..33e65a58a2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -44,8 +44,6 @@ "Parfois le panneau ne se trouve qu’à une seule extrémité de la rue. Les ruelles adjacentes aux grandes rues n’ont souvent pas de panneaux supplémentaires. Habituellement, une rue qui a une maison porte un nom." "Si vous pouvez écrire le nom sans abréviation, faites-le. Les abréviations communes sont développées automatiquement pendant que vous tapez, mais peut-être pas toutes." "Pas d’abréviation" - - "Quelles sont les horaires d’ouverture de %s ?" "heure d’ouverture" "heure de fermeture" @@ -193,7 +191,7 @@ Pour afficher la carte, les tuiles vectorielles sont extraites du <a href=\"h "Quel est le nom de cet endroit ?" - "Est-ce qu’il y a un trottoir sur cette rue ?" + "Est-ce qu’il y a un trottoir dans cette rue ?" "La carte est orientée vers le nord." "Seulement le côté nord" "Seulement le côté sud" @@ -275,7 +273,6 @@ L’information que vous entrez est ajoutée directement à OpenStreetMap en vot "Vous avez sélectionné plusieurs sports" - "L’arrêt de bus %s a-t-il un abri ?" "Ces toilettes sont-elles payantes ?" "Cet arrêt de bus a-t-il une surface podotactile ?" @@ -289,7 +286,6 @@ L’information que vous entrez est ajoutée directement à OpenStreetMap en vot "Ne plus afficher pour cette session" - "Quel est le revêtement de la route %s ?" "Quel est le panneau de vitesse maximale pour cette route ?" "La limitation de vitesse paraît étrange." @@ -317,26 +313,19 @@ S’il n’y a aucun panneau tout le long de la route mise en surbrillance, les "Cette station de métro est-elle accessible en fauteuil roulant ?" "Cette gare est-elle accessible en fauteuil roulant ?" "Ce lieu est-il accessible en fauteuil roulant ?" - - "L’arrêt de bus %s est-il accessible en fauteuil roulant ?" "La station de métro %s est-elle accessible en fauteuil roulant ?" - - "La gare %s est-elle accessible en fauteuil roulant ?" - - "Le lieu %s est-il accessible en fauteuil roulant ?" "Partiellement signifie qu’il n’y a pas plus d’une marche d’escalier afin d’accéder au magasin et que la plupart des pièces sont accessibles en fauteuil roulant." "Partiellement signifie qu’il n’y a pas plus d’une marche d’escalier pour y accéder." + "Abréviation du nom %s ?" "Est-ce que ces toilettes disposent d’une table à langer ?" - - "Est-ce que %s possède une table à langer ?" "Quel type d’installation de recyclage est-ce ?" "Déchetterie" @@ -415,12 +404,10 @@ Sinon, vous pouvez télécharger un autre clavier dans la boutique d’applicati "Vanille" "Noix" "Sisal" - - "Cette section de voie est-elle éclairée ?" - "La voie %s est-elle éclairée ?" + "La voie %s est-elle éclairée ici ?" "Cette section de route est-elle éclairée ?" "Cela utilise la détection de mouvement" "Voie allumée jour et nuit" @@ -493,9 +480,7 @@ Sinon, vous pouvez télécharger un autre clavier dans la boutique d’applicati "Est-ce que %s propose des plats vegan ?" "Seulement" "Les plats vegan ne contiennent pas de produits issus de l’exploitation animale (pas de viande, produit laitier, oeufs, ...)." - - - "Les plats végétariens ne contiennent pas d’oeufs" + "Les plats végétariens ne contiennent ni viande, ni poisson" "Répondez oui uniquement si ce lieu propose des repas adaptés à ce régime alimentaire (ignorez les entrées, etc.)" "Quel est le type de cette station de lavage ?" "Automatisé" @@ -515,8 +500,6 @@ Sinon, vous pouvez télécharger un autre clavier dans la boutique d’applicati "C’est un chemin agricole ou forestier" "C’est une voie qui n’est pas nommée" "Est ce que ces toilettes sont accessible en fauteuil?" - - "Est ce que les toilettes %s sont accessibles en fauteuil?" "Un symbole de fauteuil roulant comme celui-ci pourrait être visible si les toilettes sont accessibles. Partiellement signifie qu’un fauteuil roulant peut entrer et utiliser les toilettes, mais qu’il n’y a aucune main courante ou bassin à main adapté." diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a1a8d64307..2edb519bc4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -144,7 +144,7 @@ Para exibir o mapa, os blocos vetoriais são recuperadas do <a href=\"https:/ "Ligado" "Somente por WiFi" "Desligado" - "Que superfície tem este pedaço de rua?" + "Que tipo de pavimento tem esse trecho de rua?" "Pavimentado (genérico)" "Não-pavimentado (genérico)" "Terra (genérico)" @@ -171,7 +171,7 @@ Para exibir o mapa, os blocos vetoriais são recuperadas do <a href=\"https:/ "Sim" "Não há placa" "Onde é esta rua?" - "Que superfície tem a ciclovia aqui?" + "Que tipo de pavimento tem essa ciclovia aqui?" "Que tipo de rua de serviço é essa?" "Quantas pistas tem essa rua?" "Se não houver marcações rodoviárias, não há pistas." @@ -511,12 +511,8 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "É público (com ou sem taxa)" "É apenas para clientes" "Qual o nome desta via de pedestres?" - - - "Qual o pavimento desta quadra?" - - - "Qual o pavimento da quadra %s aqui?" + "Que tipo de pavimento tem essa quadra?" + "Que tipo de pavimento tem a quadra %s aqui?" "Depende do dia e horário" "Adicionar horários" "Sim, mas apenas..." @@ -546,12 +542,9 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "Nunca mostrar em %s" "Esta área de descanso tem um toalete?" "Qual a placa de limite de velocidade para %s?" - - - "Qual o pavimento desses degraus?" - - - "Qual o pavimento desse caminho?" + "Que tipo de pavimento têm esses degraus aqui?" + "Que tipo de pavimento tem essa trilha aqui?" + "Que tipo de pavimento tem esse caminho aqui?" "Selecione o mais específico:" "Tem certeza que não pode determinar um mais específico?" @@ -587,6 +580,10 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "Dormitório" "Casa-barco" "Bangalô" + "Casa isolada pequena (casa de verão ou feriado)" + + + "Trailer estático" "Prédio comercial" "prédio onde pessoas trabalham, fazem compras ou outra atividade comercial qualquer" "Prédio industrial" @@ -631,6 +628,10 @@ Parcialmente significa que um cadeirante pode entrar e usar o banheiro, mas barr "Estufa" "Outro" "Galpão" + + + "Cabana" + "Abrigo ou residência pequena e simples" "Telhado" "Casa de máquinas" "prédio com maquinário como bombas ou transformadores" diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 8867af03da..60810d4b98 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -567,14 +567,14 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Vad uppfördes den här byggnaden som?" "Var god lämna ett mer specifikt svar" "Den har flera ändamål" - "Välj huvudändamålet för den här byggnaden. T.ex om det finns en affär på bottenvåningen med lägenheter ovanför sig är det fortsatt i huvudsak ändå ett flerbostadshus." + "Välj huvudändamålet för den här byggnaden. T.ex om det finns en affär på bottenvåningen med lägenheter ovanför sig är det fortsatt i huvudsak ändå ett flerfamiljshus." "Den är fortfarande under konstruktion" "Bostad" "byggnad där människor bor" "Hus" "enfamiljshus" "lägenheter, kan ha affärer på bottenvåningen" - "Flerbostadshus" + "Flerfamiljshus" "Villa" "fristående enfamiljshus" "Parhus" From 3244b26320754907a44bfa622338293d39318db9 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sun, 1 Jul 2018 12:46:03 +0200 Subject: [PATCH 08/29] version++ --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1b54befa41..fc7af3935a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "de.westnordost.streetcomplete" minSdkVersion 17 targetSdkVersion 27 - versionCode 601 - versionName "6.0-beta2" + versionCode 602 + versionName "6.0" testInstrumentationRunner "android.test.InstrumentationTestRunner" buildConfigField "String", "MAPZEN_API_KEY", MAPZEN_API_KEY } From 6d6df972f88cb4159e5dd11831a30718824800fe Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 2 Jul 2018 20:43:47 +0200 Subject: [PATCH 09/29] fix NPE when saving/loading state of bus stop name form --- .../de/westnordost/streetcomplete/ApplicationComponent.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java b/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java index a8585362a0..f7beed6e3c 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java +++ b/app/src/main/java/de/westnordost/streetcomplete/ApplicationComponent.java @@ -12,6 +12,7 @@ import de.westnordost.streetcomplete.oauth.OsmOAuthDialogFragment; import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; import de.westnordost.streetcomplete.quests.QuestModule; +import de.westnordost.streetcomplete.quests.localized_name.AddLocalizedNameForm; import de.westnordost.streetcomplete.quests.oneway.AddOnewayForm; import de.westnordost.streetcomplete.quests.opening_hours.AddOpeningHoursForm; import de.westnordost.streetcomplete.quests.localized_name.AddRoadNameForm; @@ -48,6 +49,7 @@ public interface ApplicationComponent void inject(UnsyncedChangesCounter unsyncedChangesCounter); void inject(AddOpeningHoursForm addOpeningHoursForm); + void inject(AddLocalizedNameForm addLocalizedNameForm); void inject(AddRoadNameForm addRoadNameForm); void inject(AddParkingFeeForm parkingFeeForm); void inject(AddOnewayForm addOnewayForm); From fe1810ed2aa8e230a37d2586b27b9dd178bee09e Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 2 Jul 2018 22:00:22 +0200 Subject: [PATCH 10/29] fix exception when showing note that was hidden (#1116) --- .../quests/note_discussion/NoteDiscussionForm.java | 3 ++- app/src/main/res/values/strings.xml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/note_discussion/NoteDiscussionForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/note_discussion/NoteDiscussionForm.java index ae96793d30..dc7a82ecb5 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/note_discussion/NoteDiscussionForm.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/note_discussion/NoteDiscussionForm.java @@ -64,7 +64,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa new InlineAsyncTask() { - @Override protected Note doInBackground() throws Exception + @Override protected Note doInBackground() { return noteDb.get(getQuestId()).getNote(); } @@ -151,6 +151,7 @@ private int getNoteCommentActionResourceId(NoteComment.Action action) case COMMENTED: return R.string.quest_noteDiscussion_comment; case CLOSED: return R.string.quest_noteDiscussion_closed; case REOPENED: return R.string.quest_noteDiscussion_reopen; + case HIDDEN: return R.string.quest_noteDiscussion_hide; } throw new RuntimeException(); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 13a5c2b927..2e07814bcb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -56,6 +56,7 @@ "%1$s (%2$s)" "%1$s closed note (%2$s)" "%1$s reopened note (%2$s)" + "%1$s hid note (%2$s)" "Anonymous" "Answers" "Discard input?" From 44c2fbd3742133b54c5f4f64ac426b8ba079131e Mon Sep 17 00:00:00 2001 From: Mateusz Konieczny Date: Tue, 3 Jul 2018 18:45:27 +0200 Subject: [PATCH 11/29] polishing Polish text --- app/src/main/res/raw/credits_translations.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/raw/credits_translations.yml b/app/src/main/res/raw/credits_translations.yml index 2090033ae1..0790b38546 100644 --- a/app/src/main/res/raw/credits_translations.yml +++ b/app/src/main/res/raw/credits_translations.yml @@ -14,7 +14,7 @@ Lietuvių: Tomas Straupis Magyar: Zachár Benjámin, Gábor Babos, ursus Nederlands: Alert Bouterse, Pieter Vander Vennet, Pander Musubi en nog veel meer Nynorsk: Karl Ove Hufthammer -Polski: Tomasz Maciejewski, Krzysztof Krasoń, Krystian Biesaga i wiele więcej +Polski: Tomasz Maciejewski, Krzysztof Krasoń, Krystian Biesaga i wiele innych Português (BR): Alexandre de Menezes, Patrick Montenegro Português (PT): Nuno Caldeira, Aurelio Pires Русский: Anton Shestakov, zetx16 и многие другие From b43ea169f80d3817dbd6a1f1d7529abbd725af6d Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Tue, 10 Jul 2018 20:02:52 +0200 Subject: [PATCH 12/29] specify notification channel for downloading quests (fixes #1123) --- .../streetcomplete/ApplicationConstants.java | 2 ++ .../download/QuestDownloadProgressRelay.java | 13 ++++++++-- .../data/download/QuestDownloadService.java | 24 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java b/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java index 25a2c78cdc..a8200f49ff 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java +++ b/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java @@ -33,4 +33,6 @@ public class ApplicationConstants public static final int ATTACH_PHOTO_QUALITY = 60; public static final int ATTACH_PHOTO_MAXWIDTH = 1280; // WXGA + + public static final String NOTIFICATIONS_CHANNEL_DOWNLOAD = "downloading"; } diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadProgressRelay.java b/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadProgressRelay.java index c599c2d90f..333569e601 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadProgressRelay.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadProgressRelay.java @@ -28,7 +28,7 @@ public class QuestDownloadProgressRelay implements QuestDownloadProgressListener private boolean isDownloading; private Float progress; - public QuestDownloadProgressRelay(Service service, int notificationId) + public QuestDownloadProgressRelay(Service service, String notificationChannelId, int notificationId) { this.service = service; this.id = notificationId; @@ -37,7 +37,16 @@ public QuestDownloadProgressRelay(Service service, int notificationId) PendingIntent pendingIntent = PendingIntent.getActivity( service, 0, new Intent(service, MainActivity.class), 0); - notificationBuilder = new Notification.Builder(service) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + { + notificationBuilder = new Notification.Builder(service, notificationChannelId); + } + else + { + notificationBuilder = new Notification.Builder(service); + } + + notificationBuilder .setSmallIcon(R.mipmap.ic_dl_notification) .setContentTitle(ApplicationConstants.NAME) .setContentText(service.getResources().getString(R.string.notification_downloading)) diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadService.java b/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadService.java index 003b381a28..6cc8b5bb3d 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadService.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/download/QuestDownloadService.java @@ -1,15 +1,20 @@ package de.westnordost.streetcomplete.data.download; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; import android.util.Log; import java.util.concurrent.atomic.AtomicBoolean; @@ -18,9 +23,12 @@ import javax.inject.Provider; import de.westnordost.streetcomplete.Injector; +import de.westnordost.streetcomplete.R; import de.westnordost.streetcomplete.data.VisibleQuestListener; import de.westnordost.streetcomplete.data.VisibleQuestRelay; +import static de.westnordost.streetcomplete.ApplicationConstants.NOTIFICATIONS_CHANNEL_DOWNLOAD; + /** Downloads all quests in a given area asynchronously. To use, start the service with the * appropriate parameters. (see #onStartCommand) * @@ -80,10 +88,24 @@ public QuestDownloadService() thread.start(); serviceLooper = thread.getLooper(); serviceHandler = new ServiceHandler(serviceLooper); - progressListenerRelay = new QuestDownloadProgressRelay(this, 1); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + { + createNotificationChannel(); + } + progressListenerRelay = new QuestDownloadProgressRelay(this, NOTIFICATIONS_CHANNEL_DOWNLOAD, 1); visibleQuestRelay = new VisibleQuestRelay(); } + @RequiresApi(api = Build.VERSION_CODES.O) + private void createNotificationChannel() + { + NotificationManager service = (NotificationManager) getApplication().getSystemService(Context.NOTIFICATION_SERVICE); + assert service != null; + service.createNotificationChannel(new NotificationChannel( + NOTIFICATIONS_CHANNEL_DOWNLOAD, getString(R.string.notification_channel_download), NotificationManager.IMPORTANCE_LOW)); + } + @Override public int onStartCommand(@Nullable Intent intent, int flags, int startId) { cancel(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2e07814bcb..ed9cb207ff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -606,4 +606,6 @@ Otherwise, you can download another keyboard in the app store. Popular keyboards The building was tagged as: Is this correct and is it not just part of a building? + "Download" + From 2acb7f4fbeeb70541a48227ca3587e9abd82d138 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Tue, 10 Jul 2018 20:03:25 +0200 Subject: [PATCH 13/29] push version --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fc7af3935a..fc57cc68e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "de.westnordost.streetcomplete" minSdkVersion 17 targetSdkVersion 27 - versionCode 602 - versionName "6.0" + versionCode 603 + versionName "6.1" testInstrumentationRunner "android.test.InstrumentationTestRunner" buildConfigField "String", "MAPZEN_API_KEY", MAPZEN_API_KEY } From 738834b8c8822f8f5d4e5e0fe5e42d5112cb3805 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Tue, 10 Jul 2018 20:16:34 +0200 Subject: [PATCH 14/29] update strings --- app/src/main/res/values-cs/strings.xml | 97 ++++++++++++---------- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-en-rGB/strings.xml | 7 +- app/src/main/res/values-eu/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 17 ++-- app/src/main/res/values-pl/strings.xml | 26 +++++- app/src/main/res/values-sv/strings.xml | 3 +- 7 files changed, 93 insertions(+), 59 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 81e0e06739..a07b97db00 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -14,8 +14,8 @@ "%d MB" "Místo v megabytech vyčleněné na externím úložišti sloužící jako mezipaměť pro mapové dlaždice" "Zobrazit všechny poznámky" - "Zobrazit i poznámky neformulované jako otázky" - "Ignorovat poznámky neformulované jako otázky" + "Zobrazují se všechny poznámky z mapy OSM (i takové, které nejsou ve formě úkolu)" + "Poznámky z mapy OSM, které nejsou k dispozici ve formě úkolu, jsou skryté" "Velikost mezipaměti pro mapu" "Sledovat mě" "Powered by %s" @@ -27,19 +27,19 @@ "Podívám se" "Toto pole jste nechali prázdné" "Napsat poznámku?" - "Zde můžete nechat veřejnou poznámku, ke které můžou další uživatelé posílat komentáře a doufejme, že i vyřešit:" + "K tomuto úkolu můžete přidat veřejnou poznámku, ke které budou moci další uživatelé posílat komentáře a doufejme, že ji i vyřeší:" "OK" - "Ne, jen skrýt" - "Jaké jméno má tato ulice/cesta?" - "tak jak je to napsáno na ceduli se jménem, zkratky se vypisují:" + "Ne, skrýt tento úkol" + "Jak se jmenuje tato ulice?" + "Přesně tak, jak je napsáno na ceduli se jménem, zkratky se vypisují celým slovem:" "Cedule se jmény ulic někdy můžou být jen na jednom konci ulice. Pamatujte, že boční ulice, které patří k větší ulici, nemusí mít cedule se jménem. Ulice s domy jsou obvykle pojmenované." - "Pokud jde jméno zapsat bez zkratek, tak by se měly rozepsat. Spousta obvyklých zkratek se během jejich psaní automaticky rozepisuje, ale ne všechny." + "Pokud jde jméno zapsat bez zkratek, tak by se měly rozepsat. Pár obvyklých zkratek se během jejich psaní automaticky rozepisuje, ale ne všechny." "Žádná zkratka" - "Jaké jsou otevírací hodiny %s?" - "čas otevření" - "čas zavření" + "Jaká je otevírací doba %s?" + "Otevírá v" + "Zavírá v" "Přidat měsíce" "Přidat hodiny" "Přidat dny v týdnu" @@ -67,8 +67,8 @@ "Během nahrávání odpovědí došlo k chybě" "Přibližte, prosím, více mapu" "Zrušit aktuální vyhledávání a hledat místo toho zde?" - "Vyhledávání úkolů…" - "Vyhledávání dalších úkolů…" + "Vyhledávám úkoly ...." + "Vyhledávám další úkoly .…" "Určování polohy je vypnuté. Chcete přejít na nastavení, abyste ho mohli zapnout?" "Vaše poloha se používá pro vyhledávání úkolů ve vašem okolí." "O StreetComplete" @@ -82,14 +82,14 @@ "Licence" "GNU General Public License" "Nejste připojeni" - "Abyste mohli svoje odpovědi posílat přímo (bez schválení), musíte se autorizovat se svým OSM účtem. Chcete se autorizovat nyní?" + "Pro odeslání odpovědí je nutné udělit přístup aplikaci StreetComplete k Vašemu účtu na OpenStreetMap. Chcete udělit přístup nyní?" "Neautorizováno" "Tato verze StreetComplete je příliš stará. Prosím aktualizujte ji!" "Pro automatické vyhledávání úkolů ve vašem okolí zapněte určování polohy" "Nejsou tu žádné další úkoly" "Později" "Jen to spojuje dvě ulice" - "Něco jiného (napsat poznámku)" + "Něco jiného (Napište do poznámky)" "Prohlášení o ochraně soukromí" "a použití dat" "Státní svátky" @@ -99,7 +99,7 @@ "Do odchodu posledního návštěvníka" - "Otevřeno 24/7" + "Otevřeno nonstop" "Liší se podle měsíce" "Nepravidelná otevírací doba" "Popište otevírací dobu" @@ -173,28 +173,30 @@ Nicméně před nahráním vašich změn aplikace zkontroluje pomocí <a href "vedoucích na sever" - "vedoucích na zaápad" + "vedoucích na západ" "vedoucích na východ" "vedoucích na jih" - "Není tu označení pruhy" - "Odhadněte, prosím, kolik aut vedle sebe se může na tuto cestu vejít." + "Nejsou tu namalované pruhy" + "Odhadněte, kolik průběžných jízdních pruhů je na této silnici. (V obou směrech dohromady)" "Je to jednosměrka?" "Jaké číslo má tato budova?" - "Aplikace pro OpenStreetMap průzkumníky" - "Se StreetComplete můžete pomoci vylepšit OpenStreetMap! + "Aplikace pro OpenStreetMap průzkumníky v češtině" + "Se StreetComplete můžete pomoci vylepšit mapové podklady OpenStreetMap! -Tato aplikace vyhledá data ve vašem okolí, která nejsou kompletní, a která lze rozšířit a zobrazí je na mapě jako „úkoly“. Každý z těchto „úkolů“ lze snadno vyřešit na místě odpovědí na jednoduchou otázku a doplnit tak informace na mapě. +Tato aplikace vyhledá data ve Vašem okolí, která nejsou kompletní, a která lze rozšířit a zobrazí je na mapě jako „úkoly“. Každý z těchto „úkolů“ lze snadno vyřešit na místě odpovědí na jednoduchou otázku a doplnit tak informace do mapy. -Vámi vložené informace jsou potom vaším jménem přímo přidány do OpenStreetMap, bez toho, abyste museli použít další editor." - "Nemá žádné jméno" - "Opravdu nemá jméno?" - "Opravdu je bez jména" - "Přidat otevírací hodiny" +Vámi vložené informace jsou potom Vaším jménem přímo přidány do OpenStreetMap bez toho, aniž byste museli použít další editor. ( Pro nahrání Vašich odpovědí na server je nutné mít OpenStreetMap účet ) + +StreetComplete je plně přeložená do češtiny a je vyvíjena s důrazem na to, aby se jednoduše používala a aby do OSM mohl přispívat opravdu každý." + "Nemá žádný název" + "Opravdu nemá název?" + "Ano, Opravdu je bez názvu" + "Přidat otevírací dobu" "Mohli byste, prosím, zaslat vývojáři hlášení o chybě?" "Ale ne, aplikace StreetComplete minule spadla!" "Napsat email" "Nemáte nainstalovaný poštovní klient." - "Nevypínat obrazovku" + "Nezhasínat Displej" "Během vyhledávání úkolů došlo k chybě připojení. Zkuste to znovu později." "Během nahrávání odpovědí došlo k chybě připojení. Zkuste to znovu později." "Ano" @@ -237,11 +239,11 @@ Vámi vložené informace jsou potom vaším jménem přímo přidány do OpenSt "Vybrali jste více sportů" "Má autobusová zastávka %s střechu?" "Musí se na těchto toaletách platit?" - "Má tato autobusová zastávka hmatovou dlažbu?" + "Má tato autobusová zastávka dlažbu pro nevidomé?" "Má tento přechod hmatovou dlažbu na obou stranách?" - "Opravdu jste to zkontroloval na místě?" + "Opravdu jste to zkontroloval(a) na místě?" "Má autobusová zastávka %s hmatovou dlažbu?" - "Měly by být přidávány pouze informace zjištěné během průzkumu." + "Měly by být přidávány pouze informace zjištěné osobně na místě." "Je toto parkoviště pro kola zakryté (chráněno proti dešti)?" "V této relaci znovu nezobrazovat" "Jaký povrch tu má cesta %s?" @@ -288,10 +290,10 @@ Pokud nejsou podél celé cesty žádné značky, které by omezovaly rychlost v "Je v názvu %s zkratka?" - "Má tato toaleta stolek na přebalování dětí?" + "Má tato toaleta pult na přebalování dětí?" - "Má %s stolek na přebalování dětí?" + "Má %s pult na přebalování dětí?" "Jaký je toto typ recyklačního zařízení?" "Středisko" "Kontejner" @@ -299,10 +301,10 @@ Pokud nejsou podél celé cesty žádné značky, které by omezovaly rychlost v "Nevyplnili jste pole" "%1$s - %2$s" "%1$s - %2$s (%3$s)" - "Nemůžu napsat znak na značce" + "Nedokáži napsat znak, který je na ceduli" "Chybí vám na klávesnici znaky?" "Otevřít nastavení" - "Otevřít obchod" + "Otevřít Google Play obchod" "Pokud používáte výchozí klávesnici, je možné, že bude stačit v nastavení pouze povolit znakovou sadu jazyka, který potřebujete pro psaní. Jinak také můžete stáhnout v obchodě s aplikacemi jinou klávesnici. @@ -320,7 +322,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Autor a udržovatel" "a další…" "Je to obytná zóna" - "Takže tam je taková značka?" + "Takže tam je taková značka obytné zóny?" "Co se zde pěstuje?" "Víno" "Agáve" @@ -382,7 +384,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Používá detektory pohybu" "Je osvětlena nepřetržitě" "Autorizovaný účet: %s" - "Tady nelze vyhledat zde úkoly. Zkuste ještě přiblížit mapu nebo ji méně naklonit." + "Nelze vyhledat úkoly. Zkuste mapu ještě více přiblížit nebo zkuste zmenšit naklonění." "Jaký je tento přechod?" "Přechod řízený semaforem" "Přechod bez semaforu" @@ -434,11 +436,11 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "cyklostezka, oba směry" "není, ale cyklisté můžou používat chodník" "Pokročilé" - "Výběr úkolu" + "Podrobný výběr úkolů" "Povoleno" "Druh úkolu" "Resetovat" - "Dlouze stiskněte a přesuňte úkol pro jeho změnu pořadí při stahování a zobrazení na mapě." + "Dlouhým podržením a přesunutím nahoru/dolů můžete změnit pořadí, v jakém se úkoly budou stahovat a zobrazovat na mapě. Zatržítkem vpravo můžete jednotlivé úkoly povolit nebo zakázat." "Zpět" "Zrušit" "Má „%s“ na jídelním lístku vegetariánská jídla?" @@ -452,7 +454,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Samoobslužná" "Zaměstnanec myje auta" "Povolit tento typ úkolů?" - "Tento typ úkolů je ve výchozím nastavení zakázán, protože pro získání odpovědi je pravděpodobně nutné navštívit místo úkolu." + "Tento typ úkolů je ve výchozím nastavení zakázán, protože pro získání odpovědi bude pravděpodobně nutné vstoupit dovnitř budovy s úkolem." "Číslo popisné" "Orientační číslo (volitelné)" "Číslo popisné musí být určeno" @@ -485,7 +487,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Jakou konstrukci má tento most?" - "Jaká druh připojení k internetu nabízí %s?" + "Jaký druh internetového připojení nabízí %s?" "Wi-Fi" "Drátové (LAN)" "Počítač s připojením k internetu" @@ -534,10 +536,12 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Jaké je jméno této tramvajové zastávky?" "Má více čísel" "Můžete vložit čárkami oddělená čísla domů, nebo rozsahy. Například 1,3 nebo 2-6." - "Stojan" - "Ohýbač kol" + "Velký stojan" + + + "Malý stojánek" "Přístřešek" - "Skříňka" + "Kabinka" "Budova" "Jaký je to druh parkoviště pro kola?" "navržený cyklopruh" @@ -549,7 +553,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Je stavba tohoto chodníku dokončená?" "Je stavba této cesty dokončená?" "Je stavba této budovy dokončená?" - "Nikdy nezobrazovat v %s" + "Nezobrazuje se v %s (data jsou načtena z katastru)" "Má tato odpočívka toaletu?" @@ -563,7 +567,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "<p>Pro některé úkoly se stahují i další data ze třetích stran. Např. úkol týkající se jednosměrek se dotazuje rozhraní API, uloženého na westnordost.de, na pravděpodobné kandidáty na jednosměrky.</p> " "Ne (napsat poznámku)" - "Resetovat povolení úkolů a jejich poradí na výchozí nastavení?" + "Resetovat povolení úkolů a vrátit jejich pořadí na výchozí nastavení?" "K jakému účelu byla tato budova postavena?" "Vyberte prosím konkrétnější hodnotu." "Slouží k několika účelům" @@ -595,7 +599,7 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Obchod(y)" "Sklad" "Kiosek" - "Skladovací tank" + "Skladovací nádrž" "Náboženská stavba" "Kostel" "Kaple" @@ -641,4 +645,5 @@ Mezi populární klávesnice, které podporují spoustu jazyků patří Google G "Budova byla označená jako:" "Je to správně a není to pouze část budovy?" "Svatyně" + "%1$s skryl(a) poznámku (%2$s)" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f8ef4cffdd..76145c8e02 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -602,4 +602,5 @@ Teilweise bedeutet, dass man die Toilette schon im Rollstuhl benutzen kann, aber "Das Gebäude wurde bestimmt als:" "Ist das richtig und es ist auch nicht nur Teil eines Gebäudes?" "Schrein" + "%1$s hat die Notiz versteckt (%2$s)" diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 52540e17a3..969c9762f3 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -141,7 +141,7 @@ To display the map, vector tiles are retrieved from the <a href=\"https://map "Paved (generic)" "Unpaved (generic)" "Ground (generic)" - "Asphalt" + "Tarmac" "Compacted" "Concrete" "Dirt" @@ -514,4 +514,9 @@ For instance 1,3 or 2-6." "Never shown in %s" "Does this rest area have toilet facilities?" "What is the speed limit sign for %s?" + "What surface do these steps have here?" + "What surface does this bridleway have here?" + "What surface does this path have here?" + "Select the most specific one that fits:" + "Are you sure that you can not determine it more specifically?" diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index e1978fd60d..71eca63ae0 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -648,4 +648,5 @@ Bestela beste teklatu bat instalatu dezakezu. Hainbat hizkuntza onartzen dituzte "Eraikina honela etiketatu da:" "Hau zuzena da, hau ez da eraikin baten parte bat?" "Santutegia" + "%1$s(e)k oharra ezkutatu du (%2$s)" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8839674056..a067ccf560 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -48,10 +48,10 @@ "In altre parole, è aperto a qualsiasi ora tutti i giorni?" "Puoi contribuire a questa nota?" "No, nascondi" - "creato da %1$s (%2$s)" + "creata da %1$s (%2$s)" "%1$s (%2$s)" "%1$s note chiuse (%2$s)" - "%1$s ha riaperto una nota (%2$s)" + "%1$s ha riaperto la nota (%2$s)" "Anonimo" "Risposte" "Eliminare l'input?" @@ -137,7 +137,7 @@ Tuttavia, prima di caricare le modifiche, l’app fa una verifica su un <a hr "Asfalto" "Compatto" "Cementato" - "Sporco" + "Terra" "Ghiaia fine" "Erba" "Mista erba-cemento" @@ -398,8 +398,8 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "sul percorso dell'autobus" "esplicitamente condivisa con il marciapiede" "Impossibile creare un file per la foto" - "corsia ciclabile, entrambi le direzioni" - "pista ciclabile, entrambi le direzioni" + "corsia ciclabile, entrambe le direzioni" + "pista ciclabile, entrambe le direzioni" "nessuna, ma i ciclisti possono utilizzare il marciapiede" "Avanzate" "Seleziona le missioni" @@ -407,8 +407,10 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "Tipo di ricerca" "Reset" "Premere a lungo e spostare una ricerca per riordinare la sua priorità per il download e visualizzarla sulla mappa." - "Rifai" - "Annulla" + + + "Annulla" + "Non annullare" "%s ha cibo vegetariano nel menu?" "%s offre cibo vegano nel menu?" "Soltanto" @@ -596,4 +598,5 @@ Altrimenti, è possibile scaricare un'altra tastiera nell'archivio di app. Le ta "L’edificio era etichettato come:" "È corretto e non si tratta solo di una parte di un edificio?" "Sacello" + "%1$s ha nascosto la nota (%2$s)" diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5f934b1642..002d6c97aa 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -21,7 +21,7 @@ "Wspierane przez %s" "© Współautorzy OpenStreetMap" "Inne odpowiedzi…" - "Trudno stwierdzić" + "Inna odpowiedź" "Na pewno?" "Tak, na pewno" "Sprawdzę" @@ -489,12 +489,13 @@ Oznacza to, że osoba na wózku jest w stanie z niej skorzystać, ale nie ma por "Ma wiele numerów domu" "Możesz wypisać wszystkie numery, oddzielając je przecinkami, lub podać ich zakres. Na przykład 1,3 lub 2-6." - "Barierka (przytrzymuje rame roweru)" - "Szeregowy (przytrzymuje tylko koło)" + "Stojak (przytrzymuje rame roweru)" + "Wyrwikółka (przytrzymuje tylko koło)" "Szopa" "Szafka" "Budynek" "Jaki rodzaj stojaków rowerowych ma ten parking rowerowy?" + "pas rowerowy bez obowiązku użycia go przez rowerzystów" "W jakich godzinach ta skrzynka pocztowa jest opróżniania?" "Dodaj godzinę odbioru" "Godziny nie są podane" @@ -511,7 +512,8 @@ Na przykład 1,3 lub 2-6." "Wybierz najbardziej szczegółowy który pasuje:" "Czy jesteś pewien, że nie da się określić bardziej szczegółowo?" "Nie (pozostaw notatkę)" - "Jaki rodzaj budynku był tutaj budowany?" + "Przywrócić początkowy status i kolejność zadań?" + "W jakim celu ten budynek został zbudowany?" "Ma różne zastosowania" "Wybierz główne przeznaczenie budynku. Np. jeżeli na parterze bloku znajdują się sklepy, w dalszym ciągu jest on budynkiem mieszkalnym." "Nadal jest w budowie" @@ -520,6 +522,7 @@ Na przykład 1,3 lub 2-6." "Dom" "Dom jednorodzinny" "budynek dla wielu rodzin, może mieć sklepy na parterze" + "Apartamenty" "Dom jednorodzinny" "wolnostojący dom jednorodzinny" "Bliźniak" @@ -527,9 +530,13 @@ Na przykład 1,3 lub 2-6." "Szeregowiec" "Hotel" "Akademik" + "Łodź mieszkalna" "Dom parterowy" + "Budynek dla celów komercyjnych" + "budynek który powstał jako miejsce pracy, zakupów lub jakielkolwiek innej aktywności zarobkowej" "Budynek przemysłowy" "Biurowiec" + "Sklep(y)" "Magazyn" "Kiosk" "Zbiornik" @@ -546,20 +553,31 @@ Na przykład 1,3 lub 2-6." "Szpital" "Stadion" "Stacja kolejowa" + "Budynek do celów transportu publicznego" "Uniwersytet" "Budynek rządowy" "Dla samochodów" + "Zadaszenie dla samochodu" "zadaszenie dla samochodu" "Garaż" "Garaże" "Parking" + "W gospodarstwie" + "budynek mieszkalny w gospodarstwie" "Budynek gospodarczy" + "niemieszkalny budynek w gospodarstwie" "Szklarnia" "Inny" "Szopa" "Chata" "Dach" + "Budynek techniczny" + "budynek przeznaczony na maszyny takie jak transformatory czy pompy" "Hangar" + "miejsce przechowywania samolotów, helikopterów lub statków kosmicznych" "Bunkier" "Nie ma numeru" + "Budynek jest zaznaczony jako:" + "Kapliczka" + "%1$s ukrył notatkę (%2$s)" diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 60810d4b98..4e52f5d66f 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -558,7 +558,7 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Vilket underlag har den här trappan här?" "Vilket underlag har den här ridvägen här?" "Vilket underlag har den här vägen här?" - "Välj den mest specifika som passar:" + "Välj det mest detaljerade svaret som passar:" "Är du säker på att du inte kan svara mer specifikt?" "<p>För att visa kartan hämtas vektorkartor från <a href=\"https://tiles.map-data.de\">map-data.de</a>. Tjänsten loggar begäran av kartan för anonym statistik och för att hitta eventuella fel, men tar bort loggarna efter några dagar. </p>" "<p>För några uppdrag kommer tilläggsdata från tredje part att laddas ned. Sökningen efter uppdrag om enkelriktade gator använder ett API på westnordost.de för att hitta kandidater för enkelriktad körning.</p>" @@ -643,4 +643,5 @@ Annars kan du ladda ner ett annat tangentbord i appbutiken. Populära tangentbor "Byggnaden är definierad som:" "Är det korrekt och det är inte enbart en del av en byggnad?" "Helgedom" + "%1$s gömde anteckningen (%2$s)" From 67fdf1e31d33f8d7b150bb992797e6ad41bf6116 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Tue, 10 Jul 2018 20:20:15 +0200 Subject: [PATCH 15/29] add sports centre and toilets to building type quest (fixes #1124, #1125) --- .../building_type/AddBuildingTypeForm.java | 6 +-- .../quests/building_type/BuildingType.java | 2 + .../main/res/drawable/ic_building_toilets.xml | 23 ++++++++ app/src/main/res/values/strings.xml | 2 + res/building_icons.svg | 52 ++++++++++++++++--- 5 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/ic_building_toilets.xml diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/AddBuildingTypeForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/AddBuildingTypeForm.java index 0a72391f1f..5f757eb5d6 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/AddBuildingTypeForm.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/AddBuildingTypeForm.java @@ -33,8 +33,8 @@ public class AddBuildingTypeForm extends GroupedImageListQuestAnswerFragment OFFICE, INDUSTRIAL, RETAIL, WAREHOUSE, KIOSK, HOTEL, STORAGE_TANK }), new Item(CIVIC, new Item[]{ - SCHOOL, UNIVERSITY, HOSPITAL, KINDERGARTEN, TRAIN_STATION, TRANSPORTATION, - COLLEGE, GOVERNMENT, STADIUM, + SCHOOL, UNIVERSITY, HOSPITAL, KINDERGARTEN, SPORTS_CENTRE, TRAIN_STATION, + TRANSPORTATION, COLLEGE, GOVERNMENT, STADIUM, }), new Item(RELIGIOUS, new Item[]{ CHURCH, CATHEDRAL, CHAPEL, MOSQUE, TEMPLE, PAGODA, SYNAGOGUE, SHRINE @@ -46,7 +46,7 @@ public class AddBuildingTypeForm extends GroupedImageListQuestAnswerFragment FARM, FARM_AUXILIARY, GREENHOUSE, STORAGE_TANK }), new Item(null, R.drawable.ic_building_other, R.string.quest_buildingType_other, new Item[]{ - SHED, ROOF, SERVICE, HUT, HANGAR, BUNKER + SHED, ROOF, SERVICE, HUT, TOILETS, HANGAR, BUNKER }) }; } diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/BuildingType.java b/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/BuildingType.java index c2b4215439..0466e9fdc8 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/BuildingType.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/building_type/BuildingType.java @@ -35,6 +35,7 @@ public class BuildingType KINDERGARTEN = new Item("kindergarten", R.drawable.ic_building_kindergarten, R.string.quest_buildingType_kindergarten), SCHOOL = new Item("school", R.drawable.ic_building_school, R.string.quest_buildingType_school), COLLEGE = new Item("college", R.drawable.ic_building_college, R.string.quest_buildingType_college), + SPORTS_CENTRE = new Item("sports_centre", R.drawable.ic_sport_volleyball, R.string.quest_buildingType_sports_centre), HOSPITAL = new Item("hospital", R.drawable.ic_building_hospital, R.string.quest_buildingType_hospital), STADIUM = new Item("stadium", R.drawable.ic_sport_volleyball, R.string.quest_buildingType_stadium), TRAIN_STATION = new Item("train_station", R.drawable.ic_building_train_station, R.string.quest_buildingType_train_station), @@ -63,6 +64,7 @@ public class BuildingType SHED = new Item("shed", R.drawable.ic_building_shed, R.string.quest_buildingType_shed), ROOF = new Item("roof", R.drawable.ic_building_roof, R.string.quest_buildingType_roof), + TOILETS = new Item("toilets", R.drawable.ic_building_toilets, R.string.quest_buildingType_toilets), SERVICE = new Item("service", R.drawable.ic_building_service, R.string.quest_buildingType_service, R.string.quest_buildingType_service_description), HANGAR = new Item("hangar", R.drawable.ic_building_hangar, R.string.quest_buildingType_hangar, R.string.quest_buildingType_hangar_description), BUNKER = new Item("bunker", R.drawable.ic_building_bunker, R.string.quest_buildingType_bunker); diff --git a/app/src/main/res/drawable/ic_building_toilets.xml b/app/src/main/res/drawable/ic_building_toilets.xml new file mode 100644 index 0000000000..d00f7be407 --- /dev/null +++ b/app/src/main/res/drawable/ic_building_toilets.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed9cb207ff..5bf6558b81 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -569,6 +569,7 @@ Otherwise, you can download another keyboard in the app store. Popular keyboards School building College building Hospital building + Sports centre Stadium Train station Public transportation building @@ -592,6 +593,7 @@ Otherwise, you can download another keyboard in the app store. Popular keyboards Other Shed + Toilets Hut small, simple dwelling or shelter Roof diff --git a/res/building_icons.svg b/res/building_icons.svg index 414760c6b3..b51841c23a 100644 --- a/res/building_icons.svg +++ b/res/building_icons.svg @@ -34,22 +34,22 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.7071068" - inkscape:cx="428.83051" - inkscape:cy="689.91435" + inkscape:zoom="2.0000001" + inkscape:cx="354.38204" + inkscape:cy="647.66543" inkscape:document-units="px" inkscape:current-layer="layer1" - showgrid="false" + showgrid="true" inkscape:pagecheckerboard="false" showguides="true" inkscape:measure-start="0,0" inkscape:measure-end="0,0" inkscape:guide-bbox="true" inkscape:lockguides="true" - inkscape:window-width="1138" - inkscape:window-height="941" - inkscape:window-x="750" - inkscape:window-y="23" + inkscape:window-width="1611" + inkscape:window-height="867" + inkscape:window-x="62" + inkscape:window-y="74" inkscape:window-maximized="0" units="px"> + + + + + + + From 4bf2f57834f014f8a7596327beab446093727c65 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Tue, 10 Jul 2018 20:21:09 +0200 Subject: [PATCH 16/29] push version --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fc57cc68e0..ac5384a324 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { applicationId "de.westnordost.streetcomplete" minSdkVersion 17 targetSdkVersion 27 - versionCode 603 - versionName "6.1" + versionCode 700 + versionName "7.0-beta1" testInstrumentationRunner "android.test.InstrumentationTestRunner" buildConfigField "String", "MAPZEN_API_KEY", MAPZEN_API_KEY } From 21c4d3bbd2a6f4f093394529f003281e949ca4a2 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Fri, 20 Jul 2018 21:03:26 +0200 Subject: [PATCH 17/29] add some quest icons and cycleway segregation pictograms --- .../main/res/drawable/ic_path_segregated.xml | 21 +++ .../res/drawable/ic_path_segregated_l.xml | 21 +++ .../res/drawable/ic_path_segregated_no.xml | 18 ++ .../drawable/ic_quest_path_segregation.xml | 42 +++++ .../main/res/drawable/ic_quest_playground.xml | 18 ++ res/cycleway_segregation.svg | 167 ++++++++++++++++++ res/quest_icons.svg | 146 ++++++--------- 7 files changed, 342 insertions(+), 91 deletions(-) create mode 100644 app/src/main/res/drawable/ic_path_segregated.xml create mode 100644 app/src/main/res/drawable/ic_path_segregated_l.xml create mode 100644 app/src/main/res/drawable/ic_path_segregated_no.xml create mode 100644 app/src/main/res/drawable/ic_quest_path_segregation.xml create mode 100644 app/src/main/res/drawable/ic_quest_playground.xml create mode 100644 res/cycleway_segregation.svg diff --git a/app/src/main/res/drawable/ic_path_segregated.xml b/app/src/main/res/drawable/ic_path_segregated.xml new file mode 100644 index 0000000000..59fa833e3f --- /dev/null +++ b/app/src/main/res/drawable/ic_path_segregated.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_path_segregated_l.xml b/app/src/main/res/drawable/ic_path_segregated_l.xml new file mode 100644 index 0000000000..d1858136b2 --- /dev/null +++ b/app/src/main/res/drawable/ic_path_segregated_l.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_path_segregated_no.xml b/app/src/main/res/drawable/ic_path_segregated_no.xml new file mode 100644 index 0000000000..f145cbb7b3 --- /dev/null +++ b/app/src/main/res/drawable/ic_path_segregated_no.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_quest_path_segregation.xml b/app/src/main/res/drawable/ic_quest_path_segregation.xml new file mode 100644 index 0000000000..e5db9f3634 --- /dev/null +++ b/app/src/main/res/drawable/ic_quest_path_segregation.xml @@ -0,0 +1,42 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_quest_playground.xml b/app/src/main/res/drawable/ic_quest_playground.xml new file mode 100644 index 0000000000..6facbd18a5 --- /dev/null +++ b/app/src/main/res/drawable/ic_quest_playground.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/res/cycleway_segregation.svg b/res/cycleway_segregation.svg new file mode 100644 index 0000000000..e474993053 --- /dev/null +++ b/res/cycleway_segregation.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/quest_icons.svg b/res/quest_icons.svg index 4393c25999..e4acdb7334 100644 --- a/res/quest_icons.svg +++ b/res/quest_icons.svg @@ -311,16 +311,16 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1017" + inkscape:window-width="1167" + inkscape:window-height="944" id="namedview4499" showgrid="true" - inkscape:zoom="1" - inkscape:cx="854.94435" - inkscape:cy="911.59822" - inkscape:window-x="-8" - inkscape:window-y="-8" - inkscape:window-maximized="1" + inkscape:zoom="2.8284271" + inkscape:cx="1436.5062" + inkscape:cy="321.02777" + inkscape:window-x="824" + inkscape:window-y="51" + inkscape:window-maximized="0" inkscape:current-layer="svg4497" showguides="false" inkscape:lockguides="true" @@ -362,6 +362,14 @@ originy="0" enabled="true" /> + + @@ -8467,88 +8475,6 @@ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:37.48579407;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" transform="matrix(0.21649908,0,0,-0.21649908,-674.94076,-62.492952)" id="g5816-4-7-2" /> - - - - - - - - - - - - - - - - + + + + + + + + + + From 436964862a3f5c630c81dcac9bd62b623571bc8c Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 21 Jul 2018 21:01:44 +0200 Subject: [PATCH 18/29] add the little-different living street sign for FR, PT --- .../res/drawable-mcc208/ic_living_street.xml | 4 + .../res/drawable-mcc268/ic_living_street.xml | 4 + .../res/drawable/ic_living_street_france.xml | 44 ++++++ res/living_street_france.svg | 133 ++++++++++++++++++ 4 files changed, 185 insertions(+) create mode 100644 app/src/main/res/drawable-mcc208/ic_living_street.xml create mode 100644 app/src/main/res/drawable-mcc268/ic_living_street.xml create mode 100644 app/src/main/res/drawable/ic_living_street_france.xml create mode 100644 res/living_street_france.svg diff --git a/app/src/main/res/drawable-mcc208/ic_living_street.xml b/app/src/main/res/drawable-mcc208/ic_living_street.xml new file mode 100644 index 0000000000..48cc8e2b3c --- /dev/null +++ b/app/src/main/res/drawable-mcc208/ic_living_street.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-mcc268/ic_living_street.xml b/app/src/main/res/drawable-mcc268/ic_living_street.xml new file mode 100644 index 0000000000..48cc8e2b3c --- /dev/null +++ b/app/src/main/res/drawable-mcc268/ic_living_street.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_living_street_france.xml b/app/src/main/res/drawable/ic_living_street_france.xml new file mode 100644 index 0000000000..b39992cf19 --- /dev/null +++ b/app/src/main/res/drawable/ic_living_street_france.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + diff --git a/res/living_street_france.svg b/res/living_street_france.svg new file mode 100644 index 0000000000..fec1b12b3a --- /dev/null +++ b/res/living_street_france.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + From 3e09e5b8fc5fcee47a66f2cfec50623bf162566c Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Sat, 21 Jul 2018 21:19:14 +0200 Subject: [PATCH 19/29] increase number of quests to download (#1091): - manual download: 10 (before: 5) - auto-download on mobile: 4 (before: 3) - auto-download in wifi: 8 (before: 3) --- .../de/westnordost/streetcomplete/ApplicationConstants.java | 3 +++ .../main/java/de/westnordost/streetcomplete/MainActivity.java | 4 +++- .../data/download/MobileDataAutoDownloadStrategy.java | 2 +- .../data/download/WifiAutoDownloadStrategy.java | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java b/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java index a8200f49ff..09f5243cdc 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java +++ b/app/src/main/java/de/westnordost/streetcomplete/ApplicationConstants.java @@ -24,6 +24,9 @@ public class ApplicationConstants public final static int NOTE_MIN_ZOOM = 15; + /** How many quests to download when pressing manually on "download quests" */ + public final static int MANUAL_DOWNLOAD_QUEST_TYPE_COUNT = 10; + /** a "best before" duration for quests. Quests will not be downloaded again for any tile * before the time expired */ public static final int REFRESH_QUESTS_AFTER = 7*24*60*60*1000; // one week in ms diff --git a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java index 7a170f17d0..49cbd0e4b6 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java +++ b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java @@ -90,6 +90,8 @@ import de.westnordost.streetcomplete.util.SphericalEarthMath; import de.westnordost.streetcomplete.view.dialogs.AlertDialogBuilder; +import static de.westnordost.streetcomplete.ApplicationConstants.MANUAL_DOWNLOAD_QUEST_TYPE_COUNT; + public class MainActivity extends AppCompatActivity implements OsmQuestAnswerListener, CreateNoteListener, VisibleQuestListener, QuestsMapFragment.Listener, MapFragment.Listener, MapControlsFragment.Listener @@ -452,7 +454,7 @@ private void downloadAreaConfirmed(BoundingBox bbox) ApplicationConstants.MIN_DOWNLOADABLE_RADIUS_IN_METERS); } } - questController.download(bbox, 5, true); + questController.download(bbox, MANUAL_DOWNLOAD_QUEST_TYPE_COUNT, true); } diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/download/MobileDataAutoDownloadStrategy.java b/app/src/main/java/de/westnordost/streetcomplete/data/download/MobileDataAutoDownloadStrategy.java index d0fe7d3a5b..f7761b92ae 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/download/MobileDataAutoDownloadStrategy.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/download/MobileDataAutoDownloadStrategy.java @@ -20,7 +20,7 @@ public class MobileDataAutoDownloadStrategy extends AActiveRadiusStrategy @Override public int getQuestTypeDownloadCount() { - return 3; + return 4; } @Override protected int getMinQuestsInActiveRadiusPerKm2() diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/download/WifiAutoDownloadStrategy.java b/app/src/main/java/de/westnordost/streetcomplete/data/download/WifiAutoDownloadStrategy.java index e59622fa4b..cac1b9f222 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/download/WifiAutoDownloadStrategy.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/download/WifiAutoDownloadStrategy.java @@ -28,7 +28,7 @@ public class WifiAutoDownloadStrategy extends AActiveRadiusStrategy @Override public int getQuestTypeDownloadCount() { - return 3; + return 8; } @Override protected int getMinQuestsInActiveRadiusPerKm2() From c243fe813b9e225353527a51198bb395699bc4c9 Mon Sep 17 00:00:00 2001 From: Mateusz Konieczny Date: Thu, 12 Jul 2018 07:58:02 +0200 Subject: [PATCH 20/29] AddPlaygroundAccess fixes #1114 --- .../streetcomplete/quests/QuestModule.java | 2 + .../AddPlaygroundAccess.java | 45 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 48 insertions(+) create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/playground_access/AddPlaygroundAccess.java diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java index aecf58b865..3fc769ea86 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java @@ -34,6 +34,7 @@ import de.westnordost.streetcomplete.quests.parking_access.AddParkingAccess; import de.westnordost.streetcomplete.quests.parking_fee.AddParkingFee; import de.westnordost.streetcomplete.quests.parking_type.AddParkingType; +import de.westnordost.streetcomplete.quests.playground_access.AddPlaygroundAccess; import de.westnordost.streetcomplete.quests.postbox_collection_times.AddPostboxCollectionTimes; import de.westnordost.streetcomplete.quests.powerpoles_material.AddPowerPolesMaterial; import de.westnordost.streetcomplete.quests.orchard_produce.AddOrchardProduce; @@ -102,6 +103,7 @@ public class QuestModule new AddParkingFee(o), new AddBusStopName(o), new AddPathSurface(o), + new AddPlaygroundAccess(o), //late as in many areas all needed access=private is already mapped // ↓ 4. definitely shown as errors in QA tools diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/playground_access/AddPlaygroundAccess.java b/app/src/main/java/de/westnordost/streetcomplete/quests/playground_access/AddPlaygroundAccess.java new file mode 100644 index 0000000000..f83c9c4c63 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/playground_access/AddPlaygroundAccess.java @@ -0,0 +1,45 @@ +package de.westnordost.streetcomplete.quests.playground_access; + +import android.os.Bundle; +import android.support.annotation.NonNull; + +import java.util.Map; + +import javax.inject.Inject; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.data.osm.SimpleOverpassQuestType; +import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; +import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; +import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; +import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; + +public class AddPlaygroundAccess extends SimpleOverpassQuestType +{ + @Inject public AddPlaygroundAccess(OverpassMapDataDao overpassServer) { super(overpassServer); } + + @Override protected String getTagFilters() + { + return "nodes, ways, relations with leisure=playground and (!access or access=unknown)"; + } + + public AbstractQuestAnswerFragment createForm() + { + return new YesNoQuestAnswerFragment(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + if(answer.getBoolean(YesNoQuestAnswerFragment.ANSWER)){ + changes.add("access", "yes"); + } else { + changes.add("access", "private"); + } + } + @Override public String getCommitMessage() { return "Add playground access"; } + @Override public int getIcon() { return R.drawable.ic_quest_playground; } + @Override public int getTitle(@NonNull Map tags) + { + return R.string.quest_playground_access_title; + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5bf6558b81..70bd12acf9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -609,5 +609,6 @@ Otherwise, you can download another keyboard in the app store. Popular keyboards Is this correct and is it not just part of a building? "Download" + Is this playground publicly accessible? From eb558b9afb4d8c3d633cb4a4d86f4a97f29d1189 Mon Sep 17 00:00:00 2001 From: Rui Date: Sun, 22 Jul 2018 15:14:13 +0100 Subject: [PATCH 21/29] Update abbreviations.yml These are the most common abbreviations in Portugal and some in Brazil and other Portuguese speaking countries. If these regexp are too "expensive" please let me know and I will try to keep them more simple. --- app/src/main/res/raw-pt/abbreviations.yml | 37 ++++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/raw-pt/abbreviations.yml b/app/src/main/res/raw-pt/abbreviations.yml index 53a35391fc..f7d2853583 100644 --- a/app/src/main/res/raw-pt/abbreviations.yml +++ b/app/src/main/res/raw-pt/abbreviations.yml @@ -1,7 +1,36 @@ -# only add common ones which native speakers would actually use. See default file for syntax -^av(da?): avenida -^b: beco +# Adicionar apenas as abreviaturas mais comuns + +# A sintaxe para as abreviaturas é com expressões regulares, no entanto: +# - as maiúsculas e minúsculas são ignoradas +# - presume-se que é utilizado opcionalmente o ponto final "." no fim de cada abreviatura +# - se for adicionado "..." (sem aspas) no início do padrão é interpretado como sendo permitida a concatenação + +^av\.?[aª]?: avenida +^al: alameda +arq\.?[oº]?: arquiteto +b(\.?º)?: bairro +^bco?: beco ^cc: calçada +cel: coronel +d: dom +dr: doutor +dr\.?[aª]: doutora +edf?: edifício +eng\.?[oº]?: engenheiro +^esc: escadas ^estr: estrada +g(en|al): general +inf: infante +^lr?g: largo +n\.?[aª]: nossa +^p[cçr]: praça +^pct\.?[aª]: praceta +prof: professor +prof\.?[aª]: professora ^r: rua -^t(rav)?: travessa \ No newline at end of file +s\.?t[aª]: santa +s\.?t[oº]?: santo +sr: senhor +s\.?r?\.?[aª]: senhora +^t(ra?v)?: travessa +urb: urbanização From 19b9b39d728e34c85d9d9e47f79ae466d9577d99 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 23 Jul 2018 00:07:48 +0200 Subject: [PATCH 22/29] after upload, remove unanswered quests that are no longer applicable (#1131, #746) --- .../data/osm/OsmQuestGiver.java | 131 ++++++++++++++++++ .../data/osm/OsmQuestUnlocker.java | 95 ------------- .../osm/upload/AOsmQuestChangesUpload.java | 37 +++-- .../osm/upload/OsmQuestChangesUpload.java | 5 +- .../osm/upload/UndoOsmQuestChangesUpload.java | 4 +- ...lockerTest.java => OsmQuestGiverTest.java} | 53 +++++-- .../osm/upload/OsmQuestChangesUploadTest.java | 4 +- 7 files changed, 203 insertions(+), 126 deletions(-) create mode 100644 app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiver.java delete mode 100644 app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlocker.java rename app/src/test/java/de/westnordost/streetcomplete/data/osm/{OsmQuestUnlockerTest.java => OsmQuestGiverTest.java} (54%) diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiver.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiver.java new file mode 100644 index 0000000000..b1cc8c7eb0 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiver.java @@ -0,0 +1,131 @@ +package de.westnordost.streetcomplete.data.osm; + +import android.text.TextUtils; +import android.util.Log; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; +import javax.inject.Provider; + +import de.westnordost.osmapi.map.data.BoundingBox; +import de.westnordost.osmapi.map.data.Element; +import de.westnordost.osmapi.map.data.LatLon; +import de.westnordost.streetcomplete.data.QuestStatus; +import de.westnordost.streetcomplete.data.QuestType; +import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; +import de.westnordost.streetcomplete.data.osm.persist.OsmQuestDao; +import de.westnordost.streetcomplete.data.osmnotes.OsmNoteQuestDao; + +/** Manages creating new quests and removing quests that are no longer applicable for an OSM + * element locally */ +public class OsmQuestGiver +{ + private static final String TAG = "OsmQuestGiver"; + + private final OsmNoteQuestDao osmNoteQuestDb; + private final OsmQuestDao questDB; + private final ElementGeometryDao elementGeometryDB; + private final Provider> questTypesProvider; + + @Inject public OsmQuestGiver( + OsmNoteQuestDao osmNoteQuestDb, OsmQuestDao questDB, + ElementGeometryDao elementGeometryDB, Provider> questTypesProvider) + { + this.osmNoteQuestDb = osmNoteQuestDb; + this.questDB = questDB; + this.elementGeometryDB = elementGeometryDB; + this.questTypesProvider = questTypesProvider; + } + + public class QuestUpdates + { + public List createdQuests = new ArrayList<>(); + public List removedQuestIds = new ArrayList<>(); + } + + public QuestUpdates updateQuests(Element element) + { + ElementGeometry geometry = elementGeometryDB.get(element.getType(), element.getId()); + boolean hasNote = hasNoteAt(geometry.center); + + QuestUpdates result = new QuestUpdates(); + + Map currentQuests = getCurrentQuests(element); + List createdQuestsLog = new ArrayList<>(); + List removedQuestsLog = new ArrayList<>(); + + for(QuestType questType : questTypesProvider.get()) + { + if(!(questType instanceof OsmElementQuestType)) continue; + OsmElementQuestType osmQuestType = (OsmElementQuestType)questType; + + Boolean appliesToElement = osmQuestType.isApplicableTo(element); + if(appliesToElement == null) continue; + + boolean hasQuest = currentQuests.containsKey(osmQuestType); + if(appliesToElement && !hasQuest && !hasNote) + { + OsmQuest quest = new OsmQuest(osmQuestType, element.getType(), element.getId(), geometry); + result.createdQuests.add(quest); + createdQuestsLog.add(osmQuestType.getClass().getSimpleName()); + } + if(!appliesToElement && hasQuest) + { + OsmQuest quest = currentQuests.get(osmQuestType); + // only remove "fresh" unanswered quests because answered/closed quests by definition + // do not apply to the element anymore. E.g. after adding the name to the street, + // there shan't be any AddRoadName quest for that street anymore + if(quest.getStatus() == QuestStatus.NEW) + { + result.removedQuestIds.add(quest.getId()); + removedQuestsLog.add(osmQuestType.getClass().getSimpleName()); + } + } + } + + if(!result.createdQuests.isEmpty()) + { + // Before new quests are unlocked, all reverted quests need to be removed for + // this element so that they can be created anew as the case may be + questDB.deleteAllReverted(element.getType(), element.getId()); + + questDB.addAll(result.createdQuests); + + Log.d(TAG, "Created new quests for " + element.getType().name() + "#" + element.getId() + ": " + + TextUtils.join(", ", createdQuestsLog) + ); + } + if(!result.removedQuestIds.isEmpty()) + { + questDB.deleteAll(result.removedQuestIds); + + Log.d(TAG, "Removed quests no longer applicable for " + element.getType().name() + "#" + element.getId() + ": " + + TextUtils.join(", ", removedQuestsLog) + ); + } + + return result; + } + + private boolean hasNoteAt(LatLon pos) + { + BoundingBox bbox = new BoundingBox(pos, pos); + return !osmNoteQuestDb.getAllPositions(bbox).isEmpty(); + } + + private Map getCurrentQuests(Element element) + { + List quests = questDB.getAll(null, null, null, element.getType(), element.getId()); + Map result = new HashMap<>(quests.size()); + for (OsmQuest quest : quests) + { + if(quest.getStatus() == QuestStatus.REVERT) continue; + result.put(quest.getType(), quest); + } + return result; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlocker.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlocker.java deleted file mode 100644 index 0ece3e73a7..0000000000 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlocker.java +++ /dev/null @@ -1,95 +0,0 @@ -package de.westnordost.streetcomplete.data.osm; - -import android.util.Log; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Provider; - -import de.westnordost.osmapi.map.data.BoundingBox; -import de.westnordost.osmapi.map.data.Element; -import de.westnordost.osmapi.map.data.LatLon; -import de.westnordost.streetcomplete.data.QuestStatus; -import de.westnordost.streetcomplete.data.QuestType; -import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; -import de.westnordost.streetcomplete.data.osm.persist.OsmQuestDao; -import de.westnordost.streetcomplete.data.osmnotes.OsmNoteQuestDao; - -public class OsmQuestUnlocker -{ - private static final String TAG = "OsmQuestUnlocker"; - - private final OsmNoteQuestDao osmNoteQuestDb; - private final OsmQuestDao questDB; - private final ElementGeometryDao elementGeometryDB; - private final Provider> questTypesProvider; - - @Inject public OsmQuestUnlocker( - OsmNoteQuestDao osmNoteQuestDb, OsmQuestDao questDB, - ElementGeometryDao elementGeometryDB, Provider> questTypesProvider) - { - this.osmNoteQuestDb = osmNoteQuestDb; - this.questDB = questDB; - this.elementGeometryDB = elementGeometryDB; - this.questTypesProvider = questTypesProvider; - } - - public List unlockNewQuests(Element element) - { - ElementGeometry geometry = elementGeometryDB.get(element.getType(), element.getId()); - if(hasNoteAt(geometry.center)) return new ArrayList<>(); - - final ArrayList quests = new ArrayList<>(); - - Set currentQuestTypes = getCurrentQuestTypes(element); - - for(QuestType questType : questTypesProvider.get()) - { - if(!(questType instanceof OsmElementQuestType)) continue; - OsmElementQuestType osmQuestType = (OsmElementQuestType)questType; - - if(currentQuestTypes.contains(osmQuestType)) continue; - Boolean appliesToElement = osmQuestType.isApplicableTo(element); - if(appliesToElement == null || !appliesToElement) continue; - - quests.add(new OsmQuest(osmQuestType, element.getType(), element.getId(), geometry)); - } - - if(!quests.isEmpty()) - { - // Before new quests are unlocked, all reverted quests need to be removed for - // this element so that they can be created anew as the case may be - questDB.deleteAllReverted(element.getType(), element.getId()); - - int questCount = questDB.addAll(quests); - - Log.i(TAG, "Unlocked " + questCount + " new quests" + - " for " + element.getType().name() + "#" + element.getId()); - } - - return quests; - } - - private boolean hasNoteAt(LatLon pos) - { - BoundingBox bbox = new BoundingBox(pos, pos); - return !osmNoteQuestDb.getAllPositions(bbox).isEmpty(); - } - - private Set getCurrentQuestTypes(Element element) - { - List previousQuests = questDB.getAll(null, null, null, element.getType(), element.getId()); - Set previousQuestTypes = new HashSet<>(previousQuests.size()); - for (OsmQuest previousQuest : previousQuests) - { - if(previousQuest.getStatus() == QuestStatus.REVERT) continue; - - previousQuestTypes.add(previousQuest.getType()); - } - return previousQuestTypes; - } -} diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java index 17a996999c..9a1b20e5ce 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java @@ -29,14 +29,13 @@ import de.westnordost.streetcomplete.Prefs; import de.westnordost.streetcomplete.data.QuestGroup; import de.westnordost.streetcomplete.data.QuestStatus; -import de.westnordost.streetcomplete.data.QuestType; import de.westnordost.streetcomplete.data.VisibleQuestListener; import de.westnordost.streetcomplete.data.changesets.OpenChangesetInfo; import de.westnordost.streetcomplete.data.changesets.OpenChangesetKey; import de.westnordost.streetcomplete.data.changesets.OpenChangesetsDao; import de.westnordost.streetcomplete.data.osm.OsmElementQuestType; import de.westnordost.streetcomplete.data.osm.OsmQuest; -import de.westnordost.streetcomplete.data.osm.OsmQuestUnlocker; +import de.westnordost.streetcomplete.data.osm.OsmQuestGiver; import de.westnordost.streetcomplete.data.osm.changes.StringMapChanges; import de.westnordost.streetcomplete.data.osm.persist.AOsmQuestDao; import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; @@ -58,9 +57,10 @@ public abstract class AOsmQuestChangesUpload private final ChangesetsDao changesetsDao; private final DownloadedTilesDao downloadedTilesDao; private final SharedPreferences prefs; - private final OsmQuestUnlocker questUnlocker; + private final OsmQuestGiver questUnlocker; - private List unlockedQuests; + private List createdQuests; + private List removedQuestIds; private VisibleQuestListener visibleQuestListener; // The cache is just here so that uploading 500 quests of same quest type does not result in 500 DB requests. @@ -71,7 +71,7 @@ public AOsmQuestChangesUpload( ElementGeometryDao elementGeometryDB, QuestStatisticsDao statisticsDB, OpenChangesetsDao openChangesetsDB, ChangesetsDao changesetsDao, DownloadedTilesDao downloadedTilesDao, SharedPreferences prefs, - OsmQuestUnlocker questUnlocker) + OsmQuestGiver questUnlocker) { this.osmDao = osmDao; this.questDB = questDB; @@ -83,7 +83,8 @@ public AOsmQuestChangesUpload( this.downloadedTilesDao = downloadedTilesDao; this.prefs = prefs; this.questUnlocker = questUnlocker; - unlockedQuests = new ArrayList<>(); + createdQuests = new ArrayList<>(); + removedQuestIds = new ArrayList<>(); } public synchronized void setVisibleQuestListener(VisibleQuestListener visibleQuestListener) @@ -95,7 +96,8 @@ public synchronized void upload(AtomicBoolean cancelState) { int commits = 0, obsolete = 0; changesetIdsCache = new HashMap<>(); - unlockedQuests = new ArrayList<>(); + createdQuests.clear(); + removedQuestIds.clear(); HashSet uploadedQuestTypes = new HashSet<>(); @@ -127,14 +129,23 @@ public synchronized void upload(AtomicBoolean cancelState) Log.i(TAG, logMsg); - if(!unlockedQuests.isEmpty()) + if(!createdQuests.isEmpty()) { - int unlockedQuestsCount = unlockedQuests.size(); + int createdQuestsCount = createdQuests.size(); if(visibleQuestListener != null) { - visibleQuestListener.onQuestsCreated(unlockedQuests, QuestGroup.OSM); + visibleQuestListener.onQuestsCreated(createdQuests, QuestGroup.OSM); } - Log.i(TAG, "Unlocked " + unlockedQuestsCount + " new quests"); + Log.i(TAG, "Created " + createdQuestsCount + " new quests"); + } + if(!removedQuestIds.isEmpty()) + { + int removedQuestsCount = removedQuestIds.size(); + if(visibleQuestListener != null) + { + visibleQuestListener.onQuestsRemoved(removedQuestIds, QuestGroup.OSM); + } + Log.i(TAG, "Removed " + removedQuestsCount + " quests which are no longer applicable"); } closeOpenChangesets(); @@ -255,7 +266,9 @@ boolean uploadQuestChange(long changesetId, OsmQuest quest, Element element, elementDB.put(updatedElement); statisticsDB.addOne(quest.getType().getClass().getSimpleName()); - unlockedQuests.addAll(questUnlocker.unlockNewQuests(updatedElement)); + OsmQuestGiver.QuestUpdates x = questUnlocker.updateQuests(updatedElement); + createdQuests.addAll(x.createdQuests); + removedQuestIds.addAll(x.removedQuestIds); return true; } diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUpload.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUpload.java index e3f8ee1242..73ea1718b6 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUpload.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUpload.java @@ -1,7 +1,6 @@ package de.westnordost.streetcomplete.data.osm.upload; import android.content.SharedPreferences; -import android.util.Log; import javax.inject.Inject; @@ -9,7 +8,7 @@ import de.westnordost.osmapi.map.data.Element; import de.westnordost.streetcomplete.data.changesets.OpenChangesetsDao; import de.westnordost.streetcomplete.data.osm.OsmQuest; -import de.westnordost.streetcomplete.data.osm.OsmQuestUnlocker; +import de.westnordost.streetcomplete.data.osm.OsmQuestGiver; import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; import de.westnordost.streetcomplete.data.osm.persist.MergedElementDao; import de.westnordost.streetcomplete.data.osm.persist.OsmQuestDao; @@ -24,7 +23,7 @@ public class OsmQuestChangesUpload extends AOsmQuestChangesUpload ElementGeometryDao elementGeometryDB, QuestStatisticsDao statisticsDB, OpenChangesetsDao openChangesetsDB, ChangesetsDao changesetsDao, DownloadedTilesDao downloadedTilesDao, SharedPreferences prefs, - OsmQuestUnlocker questUnlocker) + OsmQuestGiver questUnlocker) { super(osmDao, questDB, elementDB, elementGeometryDB, statisticsDB, openChangesetsDB, changesetsDao, downloadedTilesDao, prefs, questUnlocker); diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/UndoOsmQuestChangesUpload.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/UndoOsmQuestChangesUpload.java index 5993904c42..312d47e313 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/UndoOsmQuestChangesUpload.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/UndoOsmQuestChangesUpload.java @@ -9,7 +9,7 @@ import de.westnordost.osmapi.map.data.Element; import de.westnordost.streetcomplete.data.changesets.OpenChangesetsDao; import de.westnordost.streetcomplete.data.osm.OsmQuest; -import de.westnordost.streetcomplete.data.osm.OsmQuestUnlocker; +import de.westnordost.streetcomplete.data.osm.OsmQuestGiver; import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; import de.westnordost.streetcomplete.data.osm.persist.MergedElementDao; import de.westnordost.streetcomplete.data.osm.persist.UndoOsmQuestDao; @@ -23,7 +23,7 @@ public class UndoOsmQuestChangesUpload extends AOsmQuestChangesUpload ElementGeometryDao elementGeometryDB, QuestStatisticsDao statisticsDB, OpenChangesetsDao openChangesetsDB, ChangesetsDao changesetsDao, DownloadedTilesDao downloadedTilesDao, SharedPreferences prefs, - OsmQuestUnlocker questUnlocker) + OsmQuestGiver questUnlocker) { super(osmDao, questDB, elementDB, elementGeometryDB, statisticsDB, openChangesetsDB, changesetsDao, downloadedTilesDao, prefs, questUnlocker); diff --git a/app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlockerTest.java b/app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiverTest.java similarity index 54% rename from app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlockerTest.java rename to app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiverTest.java index 3bedb1ecce..d6a6b9495f 100644 --- a/app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestUnlockerTest.java +++ b/app/src/test/java/de/westnordost/streetcomplete/data/osm/OsmQuestGiverTest.java @@ -3,6 +3,7 @@ import junit.framework.TestCase; import java.util.Collections; +import java.util.Date; import java.util.List; import de.westnordost.osmapi.map.data.BoundingBox; @@ -11,6 +12,7 @@ import de.westnordost.osmapi.map.data.Node; import de.westnordost.osmapi.map.data.OsmLatLon; import de.westnordost.osmapi.map.data.OsmNode; +import de.westnordost.streetcomplete.data.QuestStatus; import de.westnordost.streetcomplete.data.QuestType; import de.westnordost.streetcomplete.data.osm.persist.ElementGeometryDao; import de.westnordost.streetcomplete.data.osm.persist.OsmQuestDao; @@ -18,16 +20,17 @@ import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -public class OsmQuestUnlockerTest extends TestCase +public class OsmQuestGiverTest extends TestCase { private static LatLon POS = new OsmLatLon(10,10); private static Node NODE = new OsmNode(1, 0, POS, null, null, null); private OsmNoteQuestDao osmNoteQuestDao; private OsmQuestDao osmQuestDao; - private OsmQuestUnlocker osmQuestUnlocker; + private OsmQuestGiver osmQuestUnlocker; private OsmElementQuestType questType; @Override public void setUp() throws Exception @@ -46,16 +49,17 @@ public class OsmQuestUnlockerTest extends TestCase questType = mock(OsmElementQuestType.class); final List questTypes = Collections.singletonList(questType); - osmQuestUnlocker = new OsmQuestUnlocker(osmNoteQuestDao, osmQuestDao, elementGeometryDao, + osmQuestUnlocker = new OsmQuestGiver(osmNoteQuestDao, osmQuestDao, elementGeometryDao, () -> questTypes); } public void testNoteBlocksNewQuests() { + when(questType.isApplicableTo(NODE)).thenReturn(true); when(osmNoteQuestDao.getAllPositions(any(BoundingBox.class))) .thenReturn(Collections.singletonList(POS)); - assertTrue(osmQuestUnlocker.unlockNewQuests(NODE).isEmpty()); + assertTrue(osmQuestUnlocker.updateQuests(NODE).createdQuests.isEmpty()); } public void testPreviousQuestBlocksNewQuest() @@ -63,25 +67,50 @@ public void testPreviousQuestBlocksNewQuest() OsmQuest q = new OsmQuest(questType, Element.Type.NODE, 1, new ElementGeometry(POS)); when(osmQuestDao.getAll(null, null, null, Element.Type.NODE, 1L)) .thenReturn(Collections.singletonList(q)); + when(questType.isApplicableTo(NODE)).thenReturn(true); + + OsmQuestGiver.QuestUpdates r = osmQuestUnlocker.updateQuests(NODE); + assertTrue(r.createdQuests.isEmpty()); + assertTrue(r.removedQuestIds.isEmpty()); + } + + public void testNotApplicableBlocksNewQuest() + { + when(questType.isApplicableTo(NODE)).thenReturn(false); - assertTrue(osmQuestUnlocker.unlockNewQuests(NODE).isEmpty()); + OsmQuestGiver.QuestUpdates r = osmQuestUnlocker.updateQuests(NODE); + assertTrue(r.createdQuests.isEmpty()); + assertTrue(r.removedQuestIds.isEmpty()); } - public void testQuestDoesNotApplyToElement() + public void testNotApplicableRemovesPreviousQuest() { + OsmQuest q = new OsmQuest(123L, questType, Element.Type.NODE, 1, QuestStatus.NEW, + null, null, new Date(), new ElementGeometry(POS)); + when(osmQuestDao.getAll(null, null, null, Element.Type.NODE, 1L)) + .thenReturn(Collections.singletonList(q)); when(questType.isApplicableTo(NODE)).thenReturn(false); - assertTrue(osmQuestUnlocker.unlockNewQuests(NODE).isEmpty()); + OsmQuestGiver.QuestUpdates r = osmQuestUnlocker.updateQuests(NODE); + assertTrue(r.createdQuests.isEmpty()); + assertEquals(1,r.removedQuestIds.size()); + assertEquals(123L,(long) r.removedQuestIds.get(0)); + + verify(osmQuestDao).deleteAll(Collections.singletonList(123L)); } - public void testAddsNewQuest() + public void testApplicableAddsNewQuest() { when(questType.isApplicableTo(NODE)).thenReturn(true); - List quests = osmQuestUnlocker.unlockNewQuests(NODE); + List quests = osmQuestUnlocker.updateQuests(NODE).createdQuests; assertEquals(1, quests.size()); - assertEquals(1,quests.get(0).getElementId()); - assertEquals(Element.Type.NODE,quests.get(0).getElementType()); - assertEquals(questType,quests.get(0).getType()); + OsmQuest quest = quests.get(0); + assertEquals(1,quest.getElementId()); + assertEquals(Element.Type.NODE,quest.getElementType()); + assertEquals(questType,quest.getType()); + + verify(osmQuestDao).deleteAllReverted(Element.Type.NODE, 1); + verify(osmQuestDao).addAll(Collections.singletonList(quest)); } } diff --git a/app/src/test/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUploadTest.java b/app/src/test/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUploadTest.java index cde5285458..53c9cfaf79 100644 --- a/app/src/test/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUploadTest.java +++ b/app/src/test/java/de/westnordost/streetcomplete/data/osm/upload/OsmQuestChangesUploadTest.java @@ -31,7 +31,7 @@ import de.westnordost.streetcomplete.data.osm.AOsmElementQuestType; import de.westnordost.streetcomplete.data.osm.ElementGeometry; import de.westnordost.streetcomplete.data.osm.OsmQuest; -import de.westnordost.streetcomplete.data.osm.OsmQuestUnlocker; +import de.westnordost.streetcomplete.data.osm.OsmQuestGiver; import de.westnordost.streetcomplete.data.osm.changes.StringMapChanges; import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; import de.westnordost.streetcomplete.data.osm.changes.StringMapEntryAdd; @@ -252,7 +252,7 @@ public void testUploadNormally() MapDataDao mapDataDao = mock(MapDataDao.class); QuestStatisticsDao statisticsDao = mock(QuestStatisticsDao.class); MergedElementDao elementDb = mock(MergedElementDao.class); - OsmQuestUnlocker osmQuestUnlocker = mock(OsmQuestUnlocker.class); + OsmQuestGiver osmQuestUnlocker = mock(OsmQuestGiver.class); OsmQuestChangesUpload u = new OsmQuestChangesUpload(mapDataDao, questDb, elementDb, null, statisticsDao, null, null, null, null, osmQuestUnlocker); From 8286cd8f4fe272c8bd63dcc82a622abd95b8770c Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 23 Jul 2018 00:19:27 +0200 Subject: [PATCH 23/29] rename variable --- .../data/osm/upload/AOsmQuestChangesUpload.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java index 9a1b20e5ce..091e8d0afb 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/upload/AOsmQuestChangesUpload.java @@ -266,9 +266,9 @@ boolean uploadQuestChange(long changesetId, OsmQuest quest, Element element, elementDB.put(updatedElement); statisticsDB.addOne(quest.getType().getClass().getSimpleName()); - OsmQuestGiver.QuestUpdates x = questUnlocker.updateQuests(updatedElement); - createdQuests.addAll(x.createdQuests); - removedQuestIds.addAll(x.removedQuestIds); + OsmQuestGiver.QuestUpdates questUpdates = questUnlocker.updateQuests(updatedElement); + createdQuests.addAll(questUpdates.createdQuests); + removedQuestIds.addAll(questUpdates.removedQuestIds); return true; } From 5d54acb1ddb2a4eebe9de8773f6f9790bfce0e2b Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 23 Jul 2018 00:23:31 +0200 Subject: [PATCH 24/29] fix crash on attaching photo (fixes #1144) --- .../streetcomplete/data/osmnotes/AttachPhotoUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osmnotes/AttachPhotoUtils.java b/app/src/main/java/de/westnordost/streetcomplete/data/osmnotes/AttachPhotoUtils.java index 2e949141c1..d1e7f458af 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osmnotes/AttachPhotoUtils.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osmnotes/AttachPhotoUtils.java @@ -89,7 +89,10 @@ public static Bitmap resize(String imagePath, int maxWidth) matrix.postScale(desiredScale, desiredScale); Bitmap result = Bitmap.createBitmap(sampledSrcBitmap, 0, 0, sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true); - sampledSrcBitmap.recycle(); + if(result != sampledSrcBitmap) + { + sampledSrcBitmap.recycle(); + } return result; } From fea57fdfda8889e58a6bb0617661ff4e09f570a7 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Mon, 23 Jul 2018 21:21:36 +0200 Subject: [PATCH 25/29] disable housenumber quest for Italy #714 --- .../streetcomplete/quests/housenumber/AddHousenumber.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/housenumber/AddHousenumber.java b/app/src/main/java/de/westnordost/streetcomplete/quests/housenumber/AddHousenumber.java index 64b6184846..0df9b3cf40 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/housenumber/AddHousenumber.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/housenumber/AddHousenumber.java @@ -257,7 +257,8 @@ element alone (see download()), an Overpass query would need to be made to find "NL", // https://forum.openstreetmap.org/viewtopic.php?id=60356 "DK", // https://lists.openstreetmap.org/pipermail/talk-dk/2017-November/004898.html "NO", // https://forum.openstreetmap.org/viewtopic.php?id=60357 - "CZ" // https://lists.openstreetmap.org/pipermail/talk-cz/2017-November/017901.html + "CZ", // https://lists.openstreetmap.org/pipermail/talk-cz/2017-November/017901.html + "IT" // https://lists.openstreetmap.org/pipermail/talk-it/2018-July/063712.html }); } From 8aed3cf54afc2db737c52feb539e271e6c799eb1 Mon Sep 17 00:00:00 2001 From: Mateusz Konieczny Date: Tue, 24 Jul 2018 07:58:13 +0200 Subject: [PATCH 26/29] increase priority of AddBikeParkingType as this data is used --- .../java/de/westnordost/streetcomplete/quests/QuestModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java index 3fc769ea86..e47d2253a0 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java @@ -103,6 +103,7 @@ public class QuestModule new AddParkingFee(o), new AddBusStopName(o), new AddPathSurface(o), + new AddBikeParkingType(o), // used by OsmAnd new AddPlaygroundAccess(o), //late as in many areas all needed access=private is already mapped // ↓ 4. definitely shown as errors in QA tools @@ -122,7 +123,6 @@ public class QuestModule new AddBridgeStructure(o), new AddWheelChairAccessToilets(o), new AddReligionToWaysideShrine(o), - new AddBikeParkingType(o), new MarkCompletedBuildingConstruction(o), // ↓ 8. defined in the wiki, but not really used by anyone yet. Just collected for From e6cd0db7f68247dc8ffcc510b355f9b4330394f5 Mon Sep 17 00:00:00 2001 From: Rui Date: Tue, 24 Jul 2018 19:04:21 +0100 Subject: [PATCH 27/29] Update abbreviations.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This time is more simple and without false positives. Please check if this "n\.ª? ?s\.[aª]: nossa senhora" is correct in " ?", don't know if that works. --- app/src/main/res/raw-pt/abbreviations.yml | 31 +++++++++-------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/raw-pt/abbreviations.yml b/app/src/main/res/raw-pt/abbreviations.yml index f7d2853583..3a1507a401 100644 --- a/app/src/main/res/raw-pt/abbreviations.yml +++ b/app/src/main/res/raw-pt/abbreviations.yml @@ -5,32 +5,25 @@ # - presume-se que é utilizado opcionalmente o ponto final "." no fim de cada abreviatura # - se for adicionado "..." (sem aspas) no início do padrão é interpretado como sendo permitida a concatenação -^av\.?[aª]?: avenida +^av: avenida ^al: alameda -arq\.?[oº]?: arquiteto -b(\.?º)?: bairro -^bco?: beco -^cc: calçada +^b(\.?º)?: bairro +capt?: capitão cel: coronel d: dom dr: doutor -dr\.?[aª]: doutora -edf?: edifício eng\.?[oº]?: engenheiro -^esc: escadas ^estr: estrada -g(en|al): general -inf: infante +gen: general ^lr?g: largo -n\.?[aª]: nossa -^p[cçr]: praça -^pct\.?[aª]: praceta +mal: marcheal +n\.ª? ?s\.[aª]: nossa senhora +n\.sr\.?[aª]: nossa senhora +n\. ?sr\.?[aª]: nossa senhora +^p[cçr]a?: praça +pe: padre prof: professor -prof\.?[aª]: professora ^r: rua +s\.?t[oº]: santo s\.?t[aª]: santa -s\.?t[oº]?: santo -sr: senhor -s\.?r?\.?[aª]: senhora -^t(ra?v)?: travessa -urb: urbanização +^trv?: travessa From e5143be7d1529104cbc2597fc8c44f6fb3a12a22 Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Wed, 25 Jul 2018 15:39:07 +0200 Subject: [PATCH 28/29] Update abbreviations.yml --- app/src/main/res/raw-pt/abbreviations.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/raw-pt/abbreviations.yml b/app/src/main/res/raw-pt/abbreviations.yml index 3a1507a401..6367e94895 100644 --- a/app/src/main/res/raw-pt/abbreviations.yml +++ b/app/src/main/res/raw-pt/abbreviations.yml @@ -18,7 +18,6 @@ gen: general ^lr?g: largo mal: marcheal n\.ª? ?s\.[aª]: nossa senhora -n\.sr\.?[aª]: nossa senhora n\. ?sr\.?[aª]: nossa senhora ^p[cçr]a?: praça pe: padre From 26c28e16314df78c3317e92c8e69050a1691e0aa Mon Sep 17 00:00:00 2001 From: Tobias Zwick Date: Wed, 1 Aug 2018 21:31:16 +0200 Subject: [PATCH 29/29] research on living street and slow zones --- .../res/drawable-mcc400/ic_living_street.xml | 4 + .../res/drawable-mcc425/ic_living_street.xml | 4 + .../res/drawable/ic_living_street_israel.xml | 124 ++++++++++++++ res/country_metadata/isLivingStreetKnown.yml | 4 +- res/country_metadata/isSlowZoneKnown.yml | 3 +- res/living_street_israel.svg | 158 ++++++++++++++++++ 6 files changed, 295 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable-mcc400/ic_living_street.xml create mode 100644 app/src/main/res/drawable-mcc425/ic_living_street.xml create mode 100644 app/src/main/res/drawable/ic_living_street_israel.xml create mode 100644 res/living_street_israel.svg diff --git a/app/src/main/res/drawable-mcc400/ic_living_street.xml b/app/src/main/res/drawable-mcc400/ic_living_street.xml new file mode 100644 index 0000000000..60a65bbcab --- /dev/null +++ b/app/src/main/res/drawable-mcc400/ic_living_street.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable-mcc425/ic_living_street.xml b/app/src/main/res/drawable-mcc425/ic_living_street.xml new file mode 100644 index 0000000000..c963f447cf --- /dev/null +++ b/app/src/main/res/drawable-mcc425/ic_living_street.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_living_street_israel.xml b/app/src/main/res/drawable/ic_living_street_israel.xml new file mode 100644 index 0000000000..ecde0bb9d7 --- /dev/null +++ b/app/src/main/res/drawable/ic_living_street_israel.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + diff --git a/res/country_metadata/isLivingStreetKnown.yml b/res/country_metadata/isLivingStreetKnown.yml index f470e84f59..3440cf0772 100644 --- a/res/country_metadata/isLivingStreetKnown.yml +++ b/res/country_metadata/isLivingStreetKnown.yml @@ -6,6 +6,7 @@ default: false AL: true +AZ: true AO: true AM: true AU: true @@ -25,6 +26,7 @@ GE: true DE: true GR: true HU: true +IL: true IS: true IT: true KZ: true @@ -59,4 +61,4 @@ TR: true UA: true GB: true ZM: true -ZW: true \ No newline at end of file +ZW: true diff --git a/res/country_metadata/isSlowZoneKnown.yml b/res/country_metadata/isSlowZoneKnown.yml index 5360335fa4..addd46835b 100644 --- a/res/country_metadata/isSlowZoneKnown.yml +++ b/res/country_metadata/isSlowZoneKnown.yml @@ -31,6 +31,7 @@ MD: true ME: true MK: true MT: true +MU: true # https://en.wikipedia.org/wiki/Road_signs_in_Mauritius NL: true 'NO': true PL: true @@ -50,4 +51,4 @@ US-NY: true CA: false # according to wikipedia MX: true -PE: true \ No newline at end of file +PE: true diff --git a/res/living_street_israel.svg b/res/living_street_israel.svg new file mode 100644 index 0000000000..77c7f9348d --- /dev/null +++ b/res/living_street_israel.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + +